diff --git a/display_server/rosen/modules/render_service/BUILD.gn b/display_server/rosen/modules/render_service/BUILD.gn index 5515357dbbe3cab69e95c8fa2d8132fdb186eab4..8d3e0fd0518cf95997378dce360a8ecc9b17f205 100644 --- a/display_server/rosen/modules/render_service/BUILD.gn +++ b/display_server/rosen/modules/render_service/BUILD.gn @@ -23,7 +23,7 @@ ohos_shared_library("librender_service") { defines += [] } defines += gpu_defines - + if (use_musl) { defines += [ "FRAME_AWARE_TRACE" ] } diff --git a/display_server/rosen/modules/render_service/core/pipeline/rs_render_service.cpp b/display_server/rosen/modules/render_service/core/pipeline/rs_render_service.cpp index 2e088f69a17cc096449d4454ae4ebdf6339c33f2..e858f53f8a883f7f7399d58ebb188e6c2cfb603b 100644 --- a/display_server/rosen/modules/render_service/core/pipeline/rs_render_service.cpp +++ b/display_server/rosen/modules/render_service/core/pipeline/rs_render_service.cpp @@ -34,9 +34,13 @@ namespace Rosen { namespace { constexpr uint32_t UNI_RENDER_VSYNC_OFFSET = 10000000; } -RSRenderService::RSRenderService() {} -RSRenderService::~RSRenderService() noexcept {} +const bool REGISTER_RESULT = + SystemAbility::MakeAndRegisterAbility(DelayedSingleton::GetInstance().get()); + +RSRenderService::RSRenderService() : SystemAbility(RENDER_SERVICE, true) {} + +RSRenderService::~RSRenderService() {} bool RSRenderService::Init() { @@ -67,7 +71,7 @@ bool RSRenderService::Init() } mainThread_->rsVSyncDistributor_ = rsVSyncDistributor_; mainThread_->Init(); - + RSQosThread::GetInstance()->appVSyncDistributor_ = appVSyncDistributor_; RSQosThread::ThreadStart(); @@ -77,22 +81,40 @@ bool RSRenderService::Init() RS_LOGE("RSRenderService wait SAMGR error, return value [%d].", status); } - auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); - if (samgr == nullptr) { - RS_LOGE("RSRenderService GetSystemAbilityManager fail."); - return false; - } - samgr->AddSystemAbility(RENDER_SERVICE, this); - return true; } void RSRenderService::Run() { - RS_LOGE("RSRenderService::Run"); + RS_LOGI("RSRenderService::Run"); mainThread_->Start(); } +void RSRenderService::OnStart() +{ + RS_LOGI("RSRenderService::OnStart"); + Init(); + + std::thread rsThread([this]() { + Run(); + }); + rsThread.detach(); + + if (!Publish(this)) { + RS_LOGE("Publish failed"); + } +} + +void RSRenderService::OnStop() +{ + RS_LOGI("RSRenderService::OnStop"); +} + +void RSRenderService::OnAddSystemAbility(int32_t systemAbilityId, const std::string &deviceId) +{ + RS_LOGI("systemAbilityId: %{public}d, start", systemAbilityId); +} + sptr RSRenderService::CreateConnection(const sptr& token) { pid_t remotePid = GetCallingPid(); diff --git a/display_server/rosen/modules/render_service/core/pipeline/rs_render_service.h b/display_server/rosen/modules/render_service/core/pipeline/rs_render_service.h index db04a5e053134619d583ae125e0aa2591e9be661..00c298c3bddebb260c9caa89bdd47cc2fcff8e9b 100644 --- a/display_server/rosen/modules/render_service/core/pipeline/rs_render_service.h +++ b/display_server/rosen/modules/render_service/core/pipeline/rs_render_service.h @@ -15,9 +15,12 @@ #ifndef RENDER_SERVICE_PIPELINE_RS_RENDER_SERVICE_H #define RENDER_SERVICE_PIPELINE_RS_RENDER_SERVICE_H + #include #include +#include +#include #include "screen_manager/rs_screen_manager.h" #include "transaction/rs_render_service_stub.h" #include "vsync_controller.h" @@ -29,17 +32,18 @@ class RSMainThread; class RSSyncTask; class RSRenderServiceConnection; -class RSRenderService : public RSRenderServiceStub { +class RSRenderService : public SystemAbility, public RSRenderServiceStub { + DECLARE_DELAYED_SINGLETON(RSRenderService); + DECLARE_SYSTEM_ABILITY(RSRenderService); public: - RSRenderService(); - ~RSRenderService() noexcept; - - RSRenderService(const RSRenderService&) = delete; - RSRenderService& operator=(const RSRenderService&) = delete; - bool Init(); void Run(); + // sa_main implementation + void OnStart() override; + void OnStop() override; + void OnAddSystemAbility(int32_t systemAbilityId, const std::string &deviceId) override; + private: int Dump(int fd, const std::vector& args) override; void DoDump(std::unordered_set& argSets, std::string& dumpString) const; diff --git a/display_server/rosen/modules/render_service/ft_build/BUILD.gn b/display_server/rosen/modules/render_service/ft_build/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..0a1e5b4b4fb5fd54df3abe66144bbc66d68d6fa3 --- /dev/null +++ b/display_server/rosen/modules/render_service/ft_build/BUILD.gn @@ -0,0 +1,17 @@ +# Copyright (c) 2023 Huawei Technologies Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/gn/fangtian.gni") + +# On the openEuler platform, display_server and window_manager are in the same process +# Use sa_main.bin instead of render_service.bin \ No newline at end of file