diff --git a/services/screenservice/sinkservice/dscreenservice/include/dscreen_sink_hidumper.h b/services/common/utils/include/dscreen_hidumper.h similarity index 63% rename from services/screenservice/sinkservice/dscreenservice/include/dscreen_sink_hidumper.h rename to services/common/utils/include/dscreen_hidumper.h index 0cd16e013c55c038560579f58c7a17658df7227d..3f9ff4eb572e30dc56722b9e4c66c7007c640d6b 100644 --- a/services/screenservice/sinkservice/dscreenservice/include/dscreen_sink_hidumper.h +++ b/services/common/utils/include/dscreen_hidumper.h @@ -4,7 +4,7 @@ * 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 + * 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, @@ -13,30 +13,33 @@ * limitations under the License. */ -#ifndef OHOS_DISTRIBUTED_SCREEN_SINK_HIDUMPER_H -#define OHOS_DISTRIBUTED_SCREEN_SINK_HIDUMPER_H +#ifndef OHOS_DISTRIBUTED_SCREEN_HIDUMPER_H +#define OHOS_DISTRIBUTED_SCREEN_HIDUMPER_H #include #include #include +#include +#include #include #include #include #include "single_instance.h" +#include "dscreen_constants.h" namespace OHOS { namespace DistributedHardware { enum class HidumpFlag { UNKNOWN = 0, GET_HELP, - DUMP_SINK_SCREEN_DATA, - DUMP_SINK_SCREEN_DATA_RESTART, + DUMP_SCREEN_DATA, + DUMP_SCREEN_DATA_RESTART, }; -class DscreenSinkHidumper { - DECLARE_SINGLE_INSTANCE_BASE(DscreenSinkHidumper); +class DscreenHidumper { + DECLARE_SINGLE_INSTANCE_BASE(DscreenHidumper); public: bool Dump(const std::vector &args, std::string &result); @@ -48,8 +51,15 @@ public: void SetFileFlagTrue(); void SetReDumpFlagFalse(); void SetReDumpFlagTrue(); - DscreenSinkHidumper(); - ~DscreenSinkHidumper(); + bool GetTransDumpFlag(); + bool GetTransReDumpFlag(); + void SetTransDumpFlagFalse(); + void SetTransDumpFlagTrue(); + void SetTransReDumpFlagFalse(); + void SetTransReDumpFlagTrue(); + void SaveFile(std::string file, const VideoData &video); + DscreenHidumper(); + ~DscreenHidumper(); private: void ShowHelp(std::string &result); @@ -60,10 +70,12 @@ private: int32_t ReDumpScreenData(std::string &result); private: - bool HidumperFlag_ = false; - bool FileFullFlag_ = false; - bool ReDumpFlag_ = false; + bool hidumperFlag_ = false; + bool fileFullFlag_ = false; + bool reDumpFlag_ = false; + bool transDumpFlag_ = false; + bool transReDumpFlag_ = false; }; } // namespace DistributedHardware } // namespace OHOS -#endif // OHOS_DISTRIBUTED_SCREEN_SINK_HIDUMPER_H \ No newline at end of file +#endif // OHOS_DISTRIBUTED_SCREEN_HIDUMPER_H \ No newline at end of file diff --git a/services/screenservice/sinkservice/dscreenservice/src/dscreen_sink_hidumper.cpp b/services/common/utils/src/dscreen_hidumper.cpp similarity index 51% rename from services/screenservice/sinkservice/dscreenservice/src/dscreen_sink_hidumper.cpp rename to services/common/utils/src/dscreen_hidumper.cpp index 796cb0e81e3078f89cf32b7634b1eec45eebdf0a..06a199e1d0f751afd74f7eb5466596c4b45b47c1 100644 --- a/services/screenservice/sinkservice/dscreenservice/src/dscreen_sink_hidumper.cpp +++ b/services/common/utils/src/dscreen_hidumper.cpp @@ -13,42 +13,42 @@ * limitations under the License. */ -#include "dscreen_sink_hidumper.h" +#include "dscreen_hidumper.h" -#include "dscreen_constants.h" #include "dscreen_errcode.h" #include "dscreen_log.h" #include "dscreen_util.h" #undef DH_LOG_TAG -#define DH_LOG_TAG "DscreenSinkHidumper" +#define DH_LOG_TAG "DscreenHidumper" namespace OHOS { namespace DistributedHardware { -IMPLEMENT_SINGLE_INSTANCE(DscreenSinkHidumper); +IMPLEMENT_SINGLE_INSTANCE(DscreenHidumper); + namespace { const std::string ARGS_HELP = "-h"; -const std::string ARGS_DUMP_SINK_SCREEN_DATA = "--dump"; -const std::string ARGS_DUMP_SINK_SCREEN_DATA_RESTART = "--redump"; +const std::string ARGS_DUMP_SCREEN_DATA = "--dump"; +const std::string ARGS_DUMP_SCREEN_DATA_RESTART = "--redump"; const std::map ARGS_MAP = { { ARGS_HELP, HidumpFlag::GET_HELP }, - { ARGS_DUMP_SINK_SCREEN_DATA, HidumpFlag::DUMP_SINK_SCREEN_DATA }, - { ARGS_DUMP_SINK_SCREEN_DATA_RESTART, HidumpFlag::DUMP_SINK_SCREEN_DATA_RESTART }, + { ARGS_DUMP_SCREEN_DATA, HidumpFlag::DUMP_SCREEN_DATA }, + { ARGS_DUMP_SCREEN_DATA_RESTART, HidumpFlag::DUMP_SCREEN_DATA_RESTART }, }; } -DscreenSinkHidumper::DscreenSinkHidumper() +DscreenHidumper::DscreenHidumper() { DHLOGI("Distributed screen hidumper constructed."); } -DscreenSinkHidumper::~DscreenSinkHidumper() +DscreenHidumper::~DscreenHidumper() { DHLOGI("Distributed screen hidumper deconstructed."); } -bool DscreenSinkHidumper::Dump(const std::vector &args, std::string &result) +bool DscreenHidumper::Dump(const std::vector &args, std::string &result) { DHLOGI("Distributed screen hidumper dump args.size():%d.", args.size()); result.clear(); @@ -68,7 +68,7 @@ bool DscreenSinkHidumper::Dump(const std::vector &args, std::string return ProcessDump(args[0], result) == DH_SUCCESS; } -int32_t DscreenSinkHidumper::ProcessDump(const std::string &args, std::string &result) +int32_t DscreenHidumper::ProcessDump(const std::string &args, std::string &result) { DHLOGI("Process dump."); HidumpFlag hf = HidumpFlag::UNKNOWN; @@ -83,10 +83,10 @@ int32_t DscreenSinkHidumper::ProcessDump(const std::string &args, std::string &r } result.clear(); switch (hf) { - case HidumpFlag::DUMP_SINK_SCREEN_DATA: { + case HidumpFlag::DUMP_SCREEN_DATA: { return DumpScreenData(result); } - case HidumpFlag::DUMP_SINK_SCREEN_DATA_RESTART: { + case HidumpFlag::DUMP_SCREEN_DATA_RESTART: { return ReDumpScreenData(result); } default: { @@ -95,7 +95,7 @@ int32_t DscreenSinkHidumper::ProcessDump(const std::string &args, std::string &r } } -int32_t DscreenSinkHidumper::DumpScreenData(std::string &result) +int32_t DscreenHidumper::DumpScreenData(std::string &result) { DHLOGI("Dump screen data."); @@ -107,16 +107,17 @@ int32_t DscreenSinkHidumper::DumpScreenData(std::string &result) } } - if (FileFullFlag_ == false) { + if (fileFullFlag_ == false) { result.append("Dump..."); - HidumperFlag_ = true; + hidumperFlag_ = true; + SetTransDumpFlagTrue(); } else { result.append("File oversize 300M : stop dump, use parameter \"--redump\" to clear dumpfile and redump"); } return DH_SUCCESS; } -int32_t DscreenSinkHidumper::ReDumpScreenData(std::string &result) +int32_t DscreenHidumper::ReDumpScreenData(std::string &result) { DHLOGI("Redump screen data."); @@ -130,51 +131,82 @@ int32_t DscreenSinkHidumper::ReDumpScreenData(std::string &result) SetFileFlagFalse(); SetReDumpFlagTrue(); result.append("ReDumpStart..."); - HidumperFlag_ = true; + hidumperFlag_ = true; + SetTransReDumpFlagTrue(); return DH_SUCCESS; } -bool DscreenSinkHidumper::GetFlagStatus() +bool DscreenHidumper::GetFlagStatus() +{ + return hidumperFlag_; +} + +void DscreenHidumper::SetFlagFalse() +{ + hidumperFlag_ = false; +} + +bool DscreenHidumper::GetFileFlag() +{ + return fileFullFlag_; +} + +void DscreenHidumper::SetFileFlagFalse() +{ + fileFullFlag_ = false; +} + +void DscreenHidumper::SetFileFlagTrue() +{ + fileFullFlag_ = true; +} + +bool DscreenHidumper::GetReDumpFlag() { - return HidumperFlag_; + return reDumpFlag_; } -void DscreenSinkHidumper::SetFlagFalse() +void DscreenHidumper::SetReDumpFlagFalse() { - HidumperFlag_ = false; + reDumpFlag_ = false; } -bool DscreenSinkHidumper::GetFileFlag() +void DscreenHidumper::SetReDumpFlagTrue() { - return FileFullFlag_; + reDumpFlag_ = true; } -void DscreenSinkHidumper::SetFileFlagFalse() +bool DscreenHidumper::GetTransDumpFlag() { - FileFullFlag_ = false; + return transDumpFlag_; } -void DscreenSinkHidumper::SetFileFlagTrue() +bool DscreenHidumper::GetTransReDumpFlag() { - FileFullFlag_ = true; + return transReDumpFlag_; } -bool DscreenSinkHidumper::GetReDumpFlag() +void DscreenHidumper::SetTransDumpFlagFalse() { - return ReDumpFlag_; + transDumpFlag_ = false; } -void DscreenSinkHidumper::SetReDumpFlagFalse() +void DscreenHidumper::SetTransDumpFlagTrue() { - ReDumpFlag_ = false; + transDumpFlag_ = true; } -void DscreenSinkHidumper::SetReDumpFlagTrue() +void DscreenHidumper::SetTransReDumpFlagFalse() { - ReDumpFlag_ = true; + transReDumpFlag_ = false; } -void DscreenSinkHidumper::ShowHelp(std::string &result) +void DscreenHidumper::SetTransReDumpFlagTrue() +{ + transReDumpFlag_ = true; +} + +void DscreenHidumper::ShowHelp(std::string &result) { DHLOGI("Show help."); result.append("Usage:dump [options]\n") @@ -182,16 +214,48 @@ void DscreenSinkHidumper::ShowHelp(std::string &result) .append("-h ") .append(": show help\n") .append("--dump ") - .append(": dump sink screen data in /data/data/dscreen\n") + .append(": dump screen data in /data/data/dscreen\n") .append("--redump ") - .append(": clear file and restart dump sink screen data\n"); + .append(": clear file and restart dump screen data\n"); } -int32_t DscreenSinkHidumper::ShowIllegalInfomation(std::string &result) +int32_t DscreenHidumper::ShowIllegalInfomation(std::string &result) { DHLOGI("Show illegal information."); result.append("unknown command, -h for help."); return DH_SUCCESS; } + +void DscreenHidumper::SaveFile(std::string file, const VideoData &video) +{ + DHLOGE("Saving File."); + std::string fileName = DUMP_FILE_PATH + "/" + file + std::to_string(video.width) + ")_height(" + + std::to_string(video.height) + ")_" + video.format + ".jpg"; + DHLOGE("fileName = %s", fileName.c_str()); + if (GetReDumpFlag() == true) { + std::remove(fileName.c_str()); + SetReDumpFlagFalse(); + } + std::ofstream ofs(fileName, std::ios::binary | std::ios::out | std::ios::app); + + if (!ofs.is_open()) { + DHLOGE("open file failed."); + return; + } + DHLOGE("open Hidumper SaveFile file success."); + ofs.seekp(0, std::ios::end); + int32_t fileSize = ofs.tellp(); + if (fileSize < 0) { + DHLOGE("filesize get err"); + fileSize = 0; + } + if ((static_cast(fileSize) + video.size) < DUMP_FILE_MAX_SIZE) { + SetFileFlagFalse(); + ofs.write((const char *)(video.data), video.size); + } else { + SetFileFlagTrue(); + } + ofs.close(); +} } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/services/screenservice/sinkservice/BUILD.gn b/services/screenservice/sinkservice/BUILD.gn index 5b2080de001b582bc227491c366387b3674e6cc4..c9374925213f22b476e609b1cebee971dffbe1dc 100644 --- a/services/screenservice/sinkservice/BUILD.gn +++ b/services/screenservice/sinkservice/BUILD.gn @@ -44,9 +44,9 @@ ohos_shared_library("distributed_screen_sink") { "${interfaces_path}/innerkits/native_cpp/screen_sink/src/dscreen_sink_proxy.cpp", "${interfaces_path}/innerkits/native_cpp/screen_source/src/dscreen_source_proxy.cpp", "${services_path}/common/utils/src/dscreen_fwkkit.cpp", + "${services_path}/common/utils/src/dscreen_hidumper.cpp", "${services_path}/common/utils/src/dscreen_maprelation.cpp", "${services_path}/common/utils/src/video_param.cpp", - "./dscreenservice/src/dscreen_sink_hidumper.cpp", "./dscreenservice/src/dscreen_sink_service.cpp", "./dscreenservice/src/dscreen_sink_stub.cpp", "./screenregionmgr/1.0/src/screenregion.cpp", diff --git a/services/screenservice/sinkservice/dscreenservice/src/dscreen_sink_service.cpp b/services/screenservice/sinkservice/dscreenservice/src/dscreen_sink_service.cpp index 3a79d3b60674759f26f06022f565adf1a3bfc481..43d45bf7fae706f666fb8f1ff5251f1dba973324 100644 --- a/services/screenservice/sinkservice/dscreenservice/src/dscreen_sink_service.cpp +++ b/services/screenservice/sinkservice/dscreenservice/src/dscreen_sink_service.cpp @@ -21,7 +21,7 @@ #include "string_ex.h" #include "system_ability_definition.h" -#include "dscreen_sink_hidumper.h" +#include "dscreen_hidumper.h" #include "dscreen_constants.h" #include "dscreen_errcode.h" #include "dscreen_log.h" @@ -140,7 +140,7 @@ int32_t DScreenSinkService::Dump(int32_t fd, const std::vector& std::transform(args.cbegin(), args.cend(), std::back_inserter(argsStr), [](const std::u16string &item) { return Str16ToStr8(item); }); - if (!DscreenSinkHidumper::GetInstance().Dump(argsStr, result)) { + if (!DscreenHidumper::GetInstance().Dump(argsStr, result)) { DHLOGE("Hidump error"); return ERR_DH_SCREEN_SA_HIDUMPER_ERROR; } diff --git a/services/screenservice/sinkservice/screenregionmgr/2.0/include/screenregion.h b/services/screenservice/sinkservice/screenregionmgr/2.0/include/screenregion.h index e7f3447fe9243f82afd1854f6c3489f87a8e9764..e21fcded7e376b62b767ed5f783a46dedcb520bf 100644 --- a/services/screenservice/sinkservice/screenregionmgr/2.0/include/screenregion.h +++ b/services/screenservice/sinkservice/screenregionmgr/2.0/include/screenregion.h @@ -42,7 +42,6 @@ public: void OnEngineMessage(const std::shared_ptr &message) override; void OnEngineDataDone(const std::shared_ptr &buffer) override; void GetWSBuffer(sptr &wsBuffer, const std::shared_ptr &buffer); - void SaveFile(std::string file, const VideoData &video); int32_t Release(); int32_t InitReceiverEngine(IAVEngineProvider *providerPtr); 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 ee759a0dcb15d9178d6fe4892f9ae3c33665a413..3b27e2305a5beed65675fdafb20f19d587a14aa8 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 @@ -22,6 +22,7 @@ #include "dscreen_errcode.h" #include "dscreen_log.h" #include "dscreen_util.h" +#include "dscreen_hidumper.h" namespace OHOS { namespace DistributedHardware { @@ -162,6 +163,16 @@ int32_t AVTransReceiverAdapter::OnDataAvailable(const std::shared_ptrOnEngineDataDone(buffer); +#ifdef DUMP_DSCREENREGION_FILE + if(DscreenHidumper::GetInstance().GetTransDumpFlag() == true) { + DHLOGI("send dump to trans done"); + DscreenHidumper::GetInstance().SetTransDumpFlagFalse(); + } + if(DscreenHidumper::GetInstance().GetTransReDumpFlag() == true) { + DHLOGI("send redump to trans done"); + DscreenHidumper::GetInstance().SetTransReDumpFlagFalse(); + } +#endif } return DH_AVT_SUCCESS; } diff --git a/services/screenservice/sinkservice/screenregionmgr/2.0/src/screenregion.cpp b/services/screenservice/sinkservice/screenregionmgr/2.0/src/screenregion.cpp index 922c362d5e097e0d3bc3c0ede1e7de390d94d176..136fa6443e47a09b95e2d8027e00f9a208c05afb 100644 --- a/services/screenservice/sinkservice/screenregionmgr/2.0/src/screenregion.cpp +++ b/services/screenservice/sinkservice/screenregionmgr/2.0/src/screenregion.cpp @@ -22,7 +22,7 @@ #include "dscreen_fwkkit.h" #include "dscreen_hisysevent.h" #include "dscreen_log.h" -#include "dscreen_sink_hidumper.h" +#include "dscreen_hidumper.h" #include "dscreen_json_util.h" #include "dscreen_util.h" #include "screen.h" @@ -343,10 +343,10 @@ void ScreenRegion::OnEngineDataDone(const std::shared_ptr &buffer auto surBufAddr = static_cast(wsBuffer->GetVirAddr()); int64_t timestamp = 0; VideoData data = {surBufAddr, surBufSize, requestConfig.width, requestConfig.height, timestamp, "ycbcr_sp420"}; - if (DscreenSinkHidumper::GetInstance().GetFlagStatus() == true) { + if (DscreenHidumper::GetInstance().GetFlagStatus() == true) { DHLOGE("HidumperFlag_ = true, exec SaveFile"); - SaveFile("Screen_AfterEncoding_width(", data); - DscreenSinkHidumper::GetInstance().SetFlagFalse(); + DscreenHidumper::GetInstance().SaveFile("Screen_AfterEncoding_width(", data); + DscreenHidumper::GetInstance().SetFlagFalse(); } #endif BufferFlushConfig flushConfig = { {0, 0, wsBuffer->GetWidth(), wsBuffer->GetHeight()}, 0}; @@ -359,36 +359,6 @@ void ScreenRegion::OnEngineDataDone(const std::shared_ptr &buffer DHLOGI("Fill video buffer data to window surface success. frameNumber: %zu", frameNumber_.load()); } -void ScreenRegion::SaveFile(std::string file, const VideoData &video) -{ - DHLOGE("Saving File."); - std::string fileName = DUMP_FILE_PATH + "/" + file + std::to_string(video.width) + ")_height(" + - std::to_string(video.height) + ")_" + video.format + ".jpg"; - DHLOGE("fileName = %s", fileName.c_str()); - if (DscreenSinkHidumper::GetInstance().GetReDumpFlag() == true) { - std::remove(fileName.c_str()); - DscreenSinkHidumper::GetInstance().SetReDumpFlagFalse(); - } - std::ofstream ofs(fileName, std::ios::binary | std::ios::out | std::ios::app); - - if (!ofs.is_open()) { - DHLOGE("open file failed."); - return; - } - DHLOGE("open Hidumper SaveFile file success."); - ofs.seekp(0, std::ios::end); - uint32_t fileSize = ofs.tellp(); - DHLOGE("fileSize = %d, video.size = %d, maxsize = %d", fileSize, video.size, - DUMP_FILE_MAX_SIZE); - if ((fileSize + video.size) < DUMP_FILE_MAX_SIZE) { - DscreenSinkHidumper::GetInstance().SetFileFlagFalse(); - ofs.write((const char *)(video.data), video.size); - } else { - DscreenSinkHidumper::GetInstance().SetFileFlagTrue(); - } - ofs.close(); -} - uint64_t ScreenRegion::GetScreenId() { return screenId_; diff --git a/services/screenservice/sourceservice/BUILD.gn b/services/screenservice/sourceservice/BUILD.gn index d3e99ec9778a6939f6a176419907d872c461ce27..6c40d2cc7fc06a183fb8bd67870c8e07d5712df6 100644 --- a/services/screenservice/sourceservice/BUILD.gn +++ b/services/screenservice/sourceservice/BUILD.gn @@ -49,6 +49,7 @@ ohos_shared_library("distributed_screen_source") { "${interfaces_path}/innerkits/native_cpp/screen_sink/src/dscreen_sink_proxy.cpp", "${interfaces_path}/innerkits/native_cpp/screen_source/src/dscreen_source_proxy.cpp", "${services_path}/common/utils/src/dscreen_fwkkit.cpp", + "${services_path}/common/utils/src/dscreen_hidumper.cpp", "${services_path}/common/utils/src/dscreen_maprelation.cpp", "${services_path}/common/utils/src/video_param.cpp", "./dscreenmgr/1.0/src/dscreen.cpp", @@ -58,7 +59,6 @@ ohos_shared_library("distributed_screen_source") { "./dscreenmgr/2.0/src/dscreen_manager.cpp", "./dscreenmgr/common/src/screen_manager_adapter.cpp", "./dscreenservice/src/callback/dscreen_source_callback_proxy.cpp", - "./dscreenservice/src/dscreen_source_hidumper.cpp", "./dscreenservice/src/dscreen_source_service.cpp", "./dscreenservice/src/dscreen_source_stub.cpp", ] diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h b/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h index 23621c4400b3d773161b6ad3c6699ae44efcad83..f450c6d0c4b4b9b73c18a183e48dd712a3f766f9 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h @@ -96,7 +96,6 @@ public: int32_t AddTask(const std::shared_ptr &task); int32_t InitSenderEngine(IAVEngineProvider *providerPtr, const std::string &peerDevId); void ConsumeSurface(); - void SaveFile(std::string file, const VideoData &video); std::string GetDHId() const; std::string GetDevId() const; uint64_t GetScreenId() const; diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/src/av_sender_engine_adapter.cpp b/services/screenservice/sourceservice/dscreenmgr/2.0/src/av_sender_engine_adapter.cpp index 95b8eb0c1e4f359b3e753c18a6c55a14943cf466..5ff164ce14d66db54381bd820d56a6b5ebc2c7f4 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/src/av_sender_engine_adapter.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/src/av_sender_engine_adapter.cpp @@ -18,6 +18,7 @@ #include "dscreen_errcode.h" #include "dscreen_log.h" #include "dscreen_util.h" +#include "dscreen_hidumper.h" namespace OHOS { namespace DistributedHardware { @@ -154,7 +155,16 @@ int32_t AVTransSenderAdapter::PushData(const VideoData &video) bufferMata->SetMetaItem(AVTransTag::VIDEO_HEIGHT, std::to_string(video.height)); bufferMata->SetMetaItem(AVTransTag::VIDEO_PIXEL_FORMAT, video.format); bufferMata->SetMetaItem(AVTransTag::PRE_TIMESTAMP, std::to_string(video.timestamp)); - +#ifdef DUMP_DSCREEN_FILE + if(DscreenHidumper::GetInstance().GetTransDumpFlag() == true) { + DHLOGI("send dump to trans done"); + DscreenHidumper::GetInstance().SetTransDumpFlagFalse(); + } + if(DscreenHidumper::GetInstance().GetTransReDumpFlag() == true) { + DHLOGI("send redump to trans done"); + DscreenHidumper::GetInstance().SetTransReDumpFlagFalse(); + } +#endif int32_t ret = senderEngine_->PushData(transBuffer); if (ret != DH_AVT_SUCCESS) { DHLOGE("feed data to av transport sender failed, ret:%" PRId32, ret); diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp b/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp index afca2ca3cbb6ac7fc79103a3f0780e6f8ed5c422..ca85f157b2ce817b5e37b935b1cc94d70b135854 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp @@ -27,7 +27,7 @@ #include "dscreen_hisysevent.h" #include "dscreen_json_util.h" #include "dscreen_log.h" -#include "dscreen_source_hidumper.h" +#include "dscreen_hidumper.h" #include "dscreen_util.h" #include "common/include/screen_manager_adapter.h" @@ -321,10 +321,10 @@ void DScreen::ConsumeSurface() uint32_t videoHeight = videoParam_->GetVideoHeight(); VideoData data = { surBufAddr, surBufSize, videoWidth, videoHeight, timestamp, VIDEO_FORMAT_RGBA8888 }; #ifdef DUMP_DSCREEN_FILE - if (DscreenSourceHidumper::GetInstance().GetFlagStatus() == true) { + if (DscreenHidumper::GetInstance().GetFlagStatus() == true) { DHLOGE("HidumperFlag_ = true, exec SaveFile"); - SaveFile("Screen_BeforeCoding_width(", data); - DscreenSourceHidumper::GetInstance().SetFlagFalse(); + DscreenHidumper::GetInstance().SaveFile("Screen_BeforeCoding_width(", data); + DscreenHidumper::GetInstance().SetFlagFalse(); } #endif int32_t ret = senderAdapter_->PushData(data); @@ -335,36 +335,6 @@ void DScreen::ConsumeSurface() DHLOGI("ConsumeSurface success. timestamp=%lld", (long long)timestamp); } -void DScreen::SaveFile(std::string file, const VideoData &video) -{ - DHLOGE("Saving File."); - std::string fileName = DUMP_FILE_PATH + "/" + file + std::to_string(video.width) + ")_height(" + - std::to_string(video.height) + ")_" + video.format + ".jpg"; - DHLOGE("fileName = %s", fileName.c_str()); - if (DscreenSourceHidumper::GetInstance().GetReDumpFlag() == true) { - std::remove(fileName.c_str()); - DscreenSourceHidumper::GetInstance().SetReDumpFlagFalse(); - } - std::ofstream ofs(fileName, std::ios::binary | std::ios::out | std::ios::app); - - if (!ofs.is_open()) { - DHLOGE("open file failed."); - return; - } - DHLOGE("open Hidumper SaveFile file success."); - ofs.seekp(0, std::ios::end); - uint32_t fileSize = ofs.tellp(); - DHLOGE("fileSize = %d, video.size = %d, maxsize = %d", fileSize, video.size, - DUMP_FILE_MAX_SIZE); - if ((fileSize + video.size) < DUMP_FILE_MAX_SIZE) { - DscreenSourceHidumper::GetInstance().SetFileFlagFalse(); - ofs.write((const char *)(video.data), video.size); - } else { - DscreenSourceHidumper::GetInstance().SetFileFlagTrue(); - } - ofs.close(); -} - int32_t DScreen::InitSenderEngine(IAVEngineProvider *providerPtr, const std::string &peerDevId) { DHLOGI("InitSenderEngine enter."); diff --git a/services/screenservice/sourceservice/dscreenservice/include/dscreen_source_hidumper.h b/services/screenservice/sourceservice/dscreenservice/include/dscreen_source_hidumper.h deleted file mode 100644 index e5c28d554de3d5d9bffe0f47b8f1131b8112bedd..0000000000000000000000000000000000000000 --- a/services/screenservice/sourceservice/dscreenservice/include/dscreen_source_hidumper.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2023 Huawei Device 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. - */ - -#ifndef OHOS_DISTRIBUTED_SCREEN_SOURCE_HIDUMPER_H -#define OHOS_DISTRIBUTED_SCREEN_SOURCE_HIDUMPER_H - -#include -#include -#include - -#include -#include -#include - -#include "single_instance.h" - -namespace OHOS { -namespace DistributedHardware { -enum class HidumpFlag { - UNKNOWN = 0, - GET_HELP, - DUMP_SOURCE_SCREEN_DATA, - DUMP_SOURCE_SCREEN_DATA_RESTART, -}; - -class DscreenSourceHidumper { - DECLARE_SINGLE_INSTANCE_BASE(DscreenSourceHidumper); - -public: - bool Dump(const std::vector &args, std::string &result); - bool GetFlagStatus(); - void SetFlagFalse(); - bool GetFileFlag(); - bool GetReDumpFlag(); - void SetFileFlagFalse(); - void SetFileFlagTrue(); - void SetReDumpFlagFalse(); - void SetReDumpFlagTrue(); - DscreenSourceHidumper(); - ~DscreenSourceHidumper(); - -private: - void ShowHelp(std::string &result); - int32_t ShowIllegalInfomation(std::string &result); - int32_t ProcessDump(const std::string &args, std::string &result); - - int32_t DumpScreenData(std::string &result); - int32_t ReDumpScreenData(std::string &result); - -private: - bool HidumperFlag_ = false; - bool FileFullFlag_ = false; - bool ReDumpFlag_ = false; -}; -} // namespace DistributedHardware -} // namespace OHOS -#endif // OHOS_DISTRIBUTED_SCREEN_SOURCE_HIDUMPER_H \ No newline at end of file diff --git a/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_hidumper.cpp b/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_hidumper.cpp deleted file mode 100644 index 77d60ec1fec7affc0e32f08ee3919f6014b0cafe..0000000000000000000000000000000000000000 --- a/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_hidumper.cpp +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Copyright (c) 2023 Huawei Device 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. - */ - -#include "dscreen_source_hidumper.h" - -#include "dscreen_constants.h" -#include "dscreen_errcode.h" -#include "dscreen_log.h" -#include "dscreen_util.h" - -#undef DH_LOG_TAG -#define DH_LOG_TAG "DscreenSourceHidumper" - -namespace OHOS { -namespace DistributedHardware { -IMPLEMENT_SINGLE_INSTANCE(DscreenSourceHidumper); - -namespace { -const std::string ARGS_HELP = "-h"; -const std::string ARGS_DUMP_SOURCE_SCREEN_DATA = "--dump"; -const std::string ARGS_DUMP_SOURCE_SCREEN_DATA_RESTART = "--redump"; - -const std::map ARGS_MAP = { - { ARGS_HELP, HidumpFlag::GET_HELP }, - { ARGS_DUMP_SOURCE_SCREEN_DATA, HidumpFlag::DUMP_SOURCE_SCREEN_DATA }, - { ARGS_DUMP_SOURCE_SCREEN_DATA_RESTART, HidumpFlag::DUMP_SOURCE_SCREEN_DATA_RESTART }, -}; -} - -DscreenSourceHidumper::DscreenSourceHidumper() -{ - DHLOGI("Distributed screen hidumper constructed."); -} - -DscreenSourceHidumper::~DscreenSourceHidumper() -{ - DHLOGI("Distributed screen hidumper deconstructed."); -} - -bool DscreenSourceHidumper::Dump(const std::vector &args, std::string &result) -{ - DHLOGI("Distributed screen hidumper dump args.size():%d.", args.size()); - result.clear(); - int32_t argsSize = static_cast(args.size()); - for (int32_t i = 0; i < argsSize; i++) { - DHLOGI("Distributed screen hidumper dump args[%d]: %s.", i, args.at(i).c_str()); - } - - if (args.empty()) { - ShowHelp(result); - return true; - } else if (args.size() > 1) { - ShowIllegalInfomation(result); - return true; - } - - return ProcessDump(args[0], result) == DH_SUCCESS; -} - -int32_t DscreenSourceHidumper::ProcessDump(const std::string &args, std::string &result) -{ - DHLOGI("Process dump."); - HidumpFlag hf = HidumpFlag::UNKNOWN; - auto operatorIter = ARGS_MAP.find(args); - if (operatorIter != ARGS_MAP.end()) { - hf = operatorIter->second; - } - - if (hf == HidumpFlag::GET_HELP) { - ShowHelp(result); - return DH_SUCCESS; - } - result.clear(); - switch (hf) { - case HidumpFlag::DUMP_SOURCE_SCREEN_DATA: { - return DumpScreenData(result); - } - case HidumpFlag::DUMP_SOURCE_SCREEN_DATA_RESTART: { - return ReDumpScreenData(result); - } - default: { - return ShowIllegalInfomation(result); - } - } -} - -int32_t DscreenSourceHidumper::DumpScreenData(std::string &result) -{ - DHLOGI("Dump screen data."); - - if (access(DUMP_FILE_PATH.c_str(), 0) < 0) { - if (mkdir(DUMP_FILE_PATH.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)) { - DHLOGI("Create dir err."); - DHLOGI("dir path : %s", DUMP_FILE_PATH.c_str()); - return DSCREEN_BAD_VALUE; - } - } - - if (FileFullFlag_ == false) { - result.append("Dump..."); - HidumperFlag_ = true; - } else { - result.append("File oversize 300M : stop dump, use parameter \"--redump\" to clear dumpfile and redump"); - } - return DH_SUCCESS; -} - -int32_t DscreenSourceHidumper::ReDumpScreenData(std::string &result) -{ - DHLOGI("Redump screen data."); - - if (access(DUMP_FILE_PATH.c_str(), 0) < 0) { - if (mkdir(DUMP_FILE_PATH.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)) { - DHLOGI("Create dir err."); - DHLOGI("dir path : %s", DUMP_FILE_PATH.c_str()); - return DSCREEN_BAD_VALUE; - } - } - SetFileFlagFalse(); - SetReDumpFlagTrue(); - result.append("ReDumpStart..."); - HidumperFlag_ = true; - return DH_SUCCESS; -} - -bool DscreenSourceHidumper::GetFlagStatus() -{ - return HidumperFlag_; -} - -void DscreenSourceHidumper::SetFlagFalse() -{ - HidumperFlag_ = false; -} - -bool DscreenSourceHidumper::GetFileFlag() -{ - return FileFullFlag_; -} - -void DscreenSourceHidumper::SetFileFlagFalse() -{ - FileFullFlag_ = false; -} - -void DscreenSourceHidumper::SetFileFlagTrue() -{ - FileFullFlag_ = true; -} - -bool DscreenSourceHidumper::GetReDumpFlag() -{ - return ReDumpFlag_; -} - -void DscreenSourceHidumper::SetReDumpFlagFalse() -{ - ReDumpFlag_ = false; -} - -void DscreenSourceHidumper::SetReDumpFlagTrue() -{ - ReDumpFlag_ = true; -} - -void DscreenSourceHidumper::ShowHelp(std::string &result) -{ - DHLOGI("Show help."); - result.append("Usage:dump [options]\n") - .append("Description:\n") - .append("-h ") - .append(": show help\n") - .append("--dump ") - .append(": dump source screen data in /data/data/dscreen\n") - .append("--redump ") - .append(": clear file and restart dump source screen data\n"); -} - -int32_t DscreenSourceHidumper::ShowIllegalInfomation(std::string &result) -{ - DHLOGI("Show illegal information."); - result.append("unknown command, -h for help."); - return DH_SUCCESS; -} -} // namespace DistributedHardware -} // namespace OHOS \ No newline at end of file diff --git a/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp b/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp index a42d21a2690c3023ab3e47fe2b81a78fa603445d..b8bd9b3516251fbd2834a7f0a6739dd17fdfef3f 100644 --- a/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp +++ b/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp @@ -22,7 +22,7 @@ #include "string_ex.h" #include "system_ability_definition.h" -#include "dscreen_source_hidumper.h" +#include "dscreen_hidumper.h" #include "dscreen_constants.h" #include "dscreen_errcode.h" #include "dscreen_hisysevent.h" @@ -201,7 +201,7 @@ int32_t DScreenSourceService::Dump(int32_t fd, const std::vector std::transform(args.cbegin(), args.cend(), std::back_inserter(argsStr), [](const std::u16string &item) { return Str16ToStr8(item); }); - if (!DscreenSourceHidumper::GetInstance().Dump(argsStr, result)) { + if (!DscreenHidumper::GetInstance().Dump(argsStr, result)) { DHLOGE("Hidump error"); return ERR_DH_SCREEN_SA_HIDUMPER_ERROR; }