已合并
sync render pipeline code: hold pipeline via weak_ptr in RSRenderPipelineAgent #30688
sync render pipeline code: hold pipeline via weak_ptr in RSRenderPipelineAgent #30688
已合并
LyBbq创建于 6月12日
共 3 个文件变更+397-278
@@ -26,7 +26,7 @@ class SurfaceUtils;
26namespace Rosen {26namespace Rosen {
27class RSRenderPipelineAgent : public RefBase {27class RSRenderPipelineAgent : public RefBase {
28public:28public:
29- explicit RSRenderPipelineAgent(std::shared_ptr<RSRenderPipeline>& rsRenderPipeline);29+ explicit RSRenderPipelineAgent(std::shared_ptr<RSRenderPipeline> rsRenderPipeline);
30 ~RSRenderPipelineAgent() = default;30 ~RSRenderPipelineAgent() = default;
31 31 
32 ErrCode CommitTransaction(pid_t callingPid, bool isTokenTypeValid, bool isNonSystemAppCalling,32 ErrCode CommitTransaction(pid_t callingPid, bool isTokenTypeValid, bool isNonSystemAppCalling,
@@ -238,7 +238,7 @@ private:
238 void ConfigureForceTunnelLayer(238 void ConfigureForceTunnelLayer(
239 const RSSurfaceRenderNodeConfig& config, const sptr<IConsumerSurface>& surface, SurfaceUtils* utils);239 const RSSurfaceRenderNodeConfig& config, const sptr<IConsumerSurface>& surface, SurfaceUtils* utils);
240 240 
241- std::shared_ptr<RSRenderPipeline>& rsRenderPipeline_;241+ std::weak_ptr<RSRenderPipeline> rsRenderPipeline_;
242 std::unordered_map<pid_t, std::string> pidToBundleName_;242 std::unordered_map<pid_t, std::string> pidToBundleName_;
243 mutable std::mutex pidToBundleMutex_;243 mutable std::mutex pidToBundleMutex_;
244 mutable std::mutex mutex_;244 mutable std::mutex mutex_;
@@ -639,14 +639,14 @@ HWTEST_F(RSRenderPipelineAgentTest, CleanTest_NullPipeline, TestSize.Level1)
639 std::shared_ptr<RSRenderPipeline> renderPipeline = nullptr;639 std::shared_ptr<RSRenderPipeline> renderPipeline = nullptr;
640 sptr<RSRenderPipelineAgent> agent = sptr<RSRenderPipelineAgent>::MakeSptr(renderPipeline);640 sptr<RSRenderPipelineAgent> agent = sptr<RSRenderPipelineAgent>::MakeSptr(renderPipeline);
641 ASSERT_NE(agent, nullptr);641 ASSERT_NE(agent, nullptr);
642- ASSERT_EQ(agent->rsRenderPipeline_, nullptr);642+ ASSERT_EQ(agent->rsRenderPipeline_.lock(), nullptr);
643 643 
644 pid_t testPid = 12345;644 pid_t testPid = 12345;
645 // Should return early without crash when rsRenderPipeline_ is nullptr645 // Should return early without crash when rsRenderPipeline_ is nullptr
646 agent->Clean(testPid, false);646 agent->Clean(testPid, false);
647 agent->Clean(testPid, true);647 agent->Clean(testPid, true);
648 // Verify agent state remains unchanged after Clean648 // Verify agent state remains unchanged after Clean
649- EXPECT_EQ(agent->rsRenderPipeline_, nullptr);649+ EXPECT_EQ(agent->rsRenderPipeline_.lock(), nullptr);
650}650}
651 651 
652/**652/**
@@ -663,14 +663,14 @@ HWTEST_F(RSRenderPipelineAgentTest, CleanTest_ForRefreshFalse, TestSize.Level1)
663 renderPipeline->mainThread_ = mainThread_;663 renderPipeline->mainThread_ = mainThread_;
664 664 
665 pid_t testPid = 12345;665 pid_t testPid = 12345;
666- ASSERT_NE(agent->rsRenderPipeline_, nullptr);666+ ASSERT_NE(agent->rsRenderPipeline_.lock(), nullptr);
667- ASSERT_NE(agent->rsRenderPipeline_->mainThread_, nullptr);667+ ASSERT_NE(agent->rsRenderPipeline_.lock()->mainThread_, nullptr);
668 668 
669 // Execute Clean with forRefresh=false669 // Execute Clean with forRefresh=false
670 agent->Clean(testPid, false);670 agent->Clean(testPid, false);
671 // Verify agent and pipeline remain valid after Clean671 // Verify agent and pipeline remain valid after Clean
672- EXPECT_NE(agent->rsRenderPipeline_, nullptr);672+ EXPECT_NE(agent->rsRenderPipeline_.lock(), nullptr);
673- EXPECT_NE(agent->rsRenderPipeline_->mainThread_, nullptr);673+ EXPECT_NE(agent->rsRenderPipeline_.lock()->mainThread_, nullptr);
674}674}
675 675 
676/**676/**
@@ -687,14 +687,14 @@ HWTEST_F(RSRenderPipelineAgentTest, CleanTest_ForRefreshTrue, TestSize.Level1)
687 renderPipeline->mainThread_ = mainThread_;687 renderPipeline->mainThread_ = mainThread_;
688 688 
689 pid_t testPid = 12345;689 pid_t testPid = 12345;
690- ASSERT_NE(agent->rsRenderPipeline_, nullptr);690+ ASSERT_NE(agent->rsRenderPipeline_.lock(), nullptr);
691- ASSERT_NE(agent->rsRenderPipeline_->mainThread_, nullptr);691+ ASSERT_NE(agent->rsRenderPipeline_.lock()->mainThread_, nullptr);
692 692 
693 // Execute Clean with forRefresh=true693 // Execute Clean with forRefresh=true
694 agent->Clean(testPid, true);694 agent->Clean(testPid, true);
695 // Verify agent and pipeline remain valid after Clean695 // Verify agent and pipeline remain valid after Clean
696- EXPECT_NE(agent->rsRenderPipeline_, nullptr);696+ EXPECT_NE(agent->rsRenderPipeline_.lock(), nullptr);
697- EXPECT_NE(agent->rsRenderPipeline_->mainThread_, nullptr);697+ EXPECT_NE(agent->rsRenderPipeline_.lock()->mainThread_, nullptr);
698}698}
699 699 
700/**700/**