From 07f6bd3f57e12687dfad2271e5b90e482ac127d8 Mon Sep 17 00:00:00 2001 From: byndyx Date: Wed, 11 Oct 2023 16:04:53 +0800 Subject: [PATCH 1/4] hicollie Signed-off-by: byndyx --- bundle.json | 1 + common/include/dscreen_constants.h | 7 ++++++- services/common/utils/src/dscreen_hidumper.cpp | 5 ++++- services/screenservice/sourceservice/BUILD.gn | 1 + .../dscreenmgr/2.0/include/dscreen.h | 4 ++++ .../sourceservice/dscreenmgr/2.0/src/dscreen.cpp | 15 +++++++++++++++ 6 files changed, 31 insertions(+), 2 deletions(-) diff --git a/bundle.json b/bundle.json index d3216ec3..06fa4e64 100644 --- a/bundle.json +++ b/bundle.json @@ -39,6 +39,7 @@ "graphic_2d", "samgr", "safwk", + "hicollie", "hitrace", "c_utils", "player_framework", diff --git a/common/include/dscreen_constants.h b/common/include/dscreen_constants.h index b684ff58..68c55203 100644 --- a/common/include/dscreen_constants.h +++ b/common/include/dscreen_constants.h @@ -1,3 +1,6 @@ +/* + * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. + */ /* * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); @@ -93,7 +96,7 @@ const std::string JPEG_SESSION_NAME = "ohos.dhardware.dscreen.jpeg"; /* Screen dump data file path name */ const std::string DUMP_FILE_PATH = "/data/data/dscreen"; -/*YUV*/ +/* YUV */ constexpr int32_t YR_PARAM = 66; constexpr int32_t YG_PARAM = 129; constexpr int32_t YB_PARAM = 25; @@ -225,6 +228,8 @@ constexpr int32_t JPEG_QUALITY = 80; constexpr uint32_t BIT_RATE = 12000000; constexpr int32_t WAIT_TIMEOUT_MS = 5000; constexpr uint32_t SYSTEM_PARAM_VALUE_SIZE = 50; +constexpr uint64_t WATCHDOG_INTERVAL_TIME_MS = 20 * 1000; +constexpr uint64_t WATCHDOG_DELAY_TIME_MS = 5 * 1000; } // namespace DistributedHardware } // namespace OHOS #endif \ No newline at end of file diff --git a/services/common/utils/src/dscreen_hidumper.cpp b/services/common/utils/src/dscreen_hidumper.cpp index 1be776b1..053d0db0 100644 --- a/services/common/utils/src/dscreen_hidumper.cpp +++ b/services/common/utils/src/dscreen_hidumper.cpp @@ -1,3 +1,6 @@ +/* + * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. + */ /* * Copyright (c) 2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); @@ -243,7 +246,7 @@ void DscreenHidumper::SaveFile(std::string file, const VideoData &video) } if ((static_cast(fileSize) + video.size) < DUMP_FILE_MAX_SIZE) { SetFileFlagFalse(); - ofs.write((const char *)(video.data), video.size); + ofs.write(reinterpret_cast(video.data), video.size); } else { SetFileFlagTrue(); } diff --git a/services/screenservice/sourceservice/BUILD.gn b/services/screenservice/sourceservice/BUILD.gn index c34fa2d6..c2d9bf9d 100644 --- a/services/screenservice/sourceservice/BUILD.gn +++ b/services/screenservice/sourceservice/BUILD.gn @@ -86,6 +86,7 @@ ohos_shared_library("distributed_screen_source") { "distributed_hardware_fwk:libdhfwk_sdk", "graphic_2d:libcomposer", "graphic_2d:surface", + "hicollie:libhicollie", "hisysevent:libhisysevent", "ipc:ipc_core", "player_framework:media_client", diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h b/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h index f450c6d0..75bd9370 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h @@ -1,3 +1,6 @@ +/* + * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. + */ /* * Copyright (c) 2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); @@ -143,6 +146,7 @@ private: std::mutex taskQueueMtx_; std::queue> taskQueue_; bool taskThreadRunning_; + bool watchdogFalg_; std::shared_ptr senderAdapter_; OHOS::sptr syncFence_ = SyncFence::INVALID_FENCE; diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp b/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp index b760bb47..ce84c1da 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp @@ -1,3 +1,6 @@ +/* + * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. + */ /* * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,6 +32,7 @@ #include "dscreen_log.h" #include "dscreen_hidumper.h" #include "dscreen_util.h" +#include "xcollie/watchdog.h" #include "common/include/screen_manager_adapter.h" namespace OHOS { @@ -53,6 +57,16 @@ DScreen::DScreen(const std::string &devId, const std::string &dhId, SetState(DISABLED); taskThreadRunning_ = true; taskQueueThread_ = std::thread(&DScreen::TaskThreadLoop, this); + auto taskFunc = [this]() { + if (watchdogFalg_) { + watchdogFalg_ = false; + } else { + DHLOGE("Watchdog : Dscreen TaskThreadLoop dead."); + _Exit(0); + } + }; + OHOS::HiviewDFX::Watchdog::GetInstance().RunPeriodicalTask("dscreenwatchdog", taskFunc, WATCHDOG_INTERVAL_TIME_MS, + WATCHDOG_DELAY_TIME_MS); } DScreen::~DScreen() @@ -576,6 +590,7 @@ void DScreen::TaskThreadLoop() } DHLOGD("run task, task queue size: %zu", taskQueue_.size()); HandleTask(task); + watchdogFalg_ = true; } } -- Gitee From 2593e7084d1da96f74863d2db5f865be09a7055f Mon Sep 17 00:00:00 2001 From: byndyx Date: Wed, 11 Oct 2023 20:07:27 +0800 Subject: [PATCH 2/4] hicollie Signed-off-by: byndyx --- .../2.0/src/av_receiver_engine_adapter.cpp | 9 ++++++++- .../sourceservice/dscreenmgr/2.0/include/dscreen.h | 2 +- .../sourceservice/dscreenmgr/2.0/src/dscreen.cpp | 7 ++++--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/services/screenservice/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adapter.cpp b/services/screenservice/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adapter.cpp index d5d48f4f..fa5ce3b4 100644 --- a/services/screenservice/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adapter.cpp +++ b/services/screenservice/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adapter.cpp @@ -1,3 +1,6 @@ +/* + * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. + */ /* * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); @@ -174,6 +177,11 @@ int32_t AVTransReceiverAdapter::OnDataAvailable(const std::shared_ptrOnEngineDataDone(buffer); + } + if (receiverEngine_ == nullptr) { + DHLOGE("av transport receiver engine is null"); + return ERR_DH_AV_TRANS_NULL_VALUE; + } #ifdef DUMP_DSCREENREGION_FILE if (DscreenHidumper::GetInstance().GetFlagStatus()) { receiverEngine_->StartDumpMediaData(); @@ -185,7 +193,6 @@ int32_t AVTransReceiverAdapter::OnDataAvailable(const std::shared_ptr> taskQueue_; bool taskThreadRunning_; - bool watchdogFalg_; + bool watchdogFlag_; std::shared_ptr senderAdapter_; OHOS::sptr syncFence_ = SyncFence::INVALID_FENCE; diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp b/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp index ce84c1da..6e66f7a8 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp @@ -56,10 +56,11 @@ DScreen::DScreen(const std::string &devId, const std::string &dhId, dscreenCallback_ = dscreenCallback; SetState(DISABLED); taskThreadRunning_ = true; + watchdogFlag_ = false; taskQueueThread_ = std::thread(&DScreen::TaskThreadLoop, this); auto taskFunc = [this]() { - if (watchdogFalg_) { - watchdogFalg_ = false; + if (watchdogFlag_) { + watchdogFlag_ = false; } else { DHLOGE("Watchdog : Dscreen TaskThreadLoop dead."); _Exit(0); @@ -573,6 +574,7 @@ void DScreen::TaskThreadLoop() DHLOGI("DScreen taskThread start. devId: %s, dhId: %s", GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str()); while (taskThreadRunning_) { + watchdogFlag_ = true; std::shared_ptr task; { std::unique_lock lock(taskQueueMtx_); @@ -590,7 +592,6 @@ void DScreen::TaskThreadLoop() } DHLOGD("run task, task queue size: %zu", taskQueue_.size()); HandleTask(task); - watchdogFalg_ = true; } } -- Gitee From c21a8a20851f7082330cb2cf7cdbb549214811d6 Mon Sep 17 00:00:00 2001 From: byndyx Date: Fri, 13 Oct 2023 10:21:55 +0800 Subject: [PATCH 3/4] hicollie Signed-off-by: byndyx --- .../2.0/src/av_receiver_engine_adapter.cpp | 18 +++++++++--------- .../src/av_receiver_engine_adapter_test.cpp | 4 +++- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/services/screenservice/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adapter.cpp b/services/screenservice/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adapter.cpp index fa5ce3b4..a0312a46 100644 --- a/services/screenservice/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adapter.cpp +++ b/services/screenservice/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adapter.cpp @@ -183,15 +183,15 @@ int32_t AVTransReceiverAdapter::OnDataAvailable(const std::shared_ptrStartDumpMediaData(); - } else { - receiverEngine_->StopDumpMediaData(); - } - if (DscreenHidumper::GetInstance().GetTransReDumpFlag()) { - receiverEngine_->ReStartDumpMediaData(); - DscreenHidumper::GetInstance().SetTransReDumpFlagFalse(); - } + if (DscreenHidumper::GetInstance().GetFlagStatus()) { + receiverEngine_->StartDumpMediaData(); + } else { + receiverEngine_->StopDumpMediaData(); + } + if (DscreenHidumper::GetInstance().GetTransReDumpFlag()) { + receiverEngine_->ReStartDumpMediaData(); + DscreenHidumper::GetInstance().SetTransReDumpFlagFalse(); + } #endif return DH_AVT_SUCCESS; } diff --git a/services/screenservice/test/unittest/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adapter_test.cpp b/services/screenservice/test/unittest/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adapter_test.cpp index 38307e11..d1bd7fdb 100644 --- a/services/screenservice/test/unittest/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adapter_test.cpp +++ b/services/screenservice/test/unittest/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adapter_test.cpp @@ -150,11 +150,13 @@ HWTEST_F(AVReceiverEngineAdapterTest, OnReceiverEvent_001, TestSize.Level1) std::shared_ptr message = nullptr; EXPECT_EQ(DH_SUCCESS, receiverAdapter_->OnMessageReceived(message)); std::shared_ptr buffer = nullptr; - EXPECT_EQ(DH_SUCCESS, receiverAdapter_->OnDataAvailable(buffer)); + EXPECT_EQ(ERR_DH_AV_TRANS_NULL_VALUE, receiverAdapter_->OnDataAvailable(buffer)); receiverAdapter_->adapterCallback_ = std::make_shared(); + receiverAdapter_->receiverEngine_ = std::make_shared(); EXPECT_EQ(DH_SUCCESS, receiverAdapter_->OnReceiverEvent(event)); EXPECT_EQ(DH_SUCCESS, receiverAdapter_->OnMessageReceived(message)); EXPECT_EQ(DH_SUCCESS, receiverAdapter_->OnDataAvailable(buffer)); + EXPECT_EQ(DH_SUCCESS, receiverAdapter_->Release()); } } // namespace DistributedHardware } // namespace OHOS -- Gitee From 8aaec226d273481bf5b740a38c62973678405d59 Mon Sep 17 00:00:00 2001 From: byndyx Date: Fri, 13 Oct 2023 16:34:23 +0800 Subject: [PATCH 4/4] hicollie Signed-off-by: byndyx --- common/include/dscreen_constants.h | 3 --- services/common/utils/src/dscreen_hidumper.cpp | 3 --- .../screenregionmgr/2.0/src/av_receiver_engine_adapter.cpp | 3 --- .../sourceservice/dscreenmgr/2.0/include/dscreen.h | 3 --- .../screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp | 3 --- 5 files changed, 15 deletions(-) diff --git a/common/include/dscreen_constants.h b/common/include/dscreen_constants.h index 68c55203..6f8e1f38 100644 --- a/common/include/dscreen_constants.h +++ b/common/include/dscreen_constants.h @@ -1,6 +1,3 @@ -/* - * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. - */ /* * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/services/common/utils/src/dscreen_hidumper.cpp b/services/common/utils/src/dscreen_hidumper.cpp index 053d0db0..12837c19 100644 --- a/services/common/utils/src/dscreen_hidumper.cpp +++ b/services/common/utils/src/dscreen_hidumper.cpp @@ -1,6 +1,3 @@ -/* - * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. - */ /* * Copyright (c) 2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/services/screenservice/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adapter.cpp b/services/screenservice/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adapter.cpp index a0312a46..97747b3e 100644 --- a/services/screenservice/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adapter.cpp +++ b/services/screenservice/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adapter.cpp @@ -1,6 +1,3 @@ -/* - * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. - */ /* * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h b/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h index e106511e..b1d65692 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h @@ -1,6 +1,3 @@ -/* - * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. - */ /* * Copyright (c) 2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp b/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp index 6e66f7a8..85937238 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp @@ -1,6 +1,3 @@ -/* - * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. - */ /* * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); -- Gitee