diff --git a/frameworks/base/BUILD.gn b/frameworks/base/BUILD.gn index 094adbe1b2bd17dec30cb1ee3576612a9f453d70..eba6a12e1b5ac48950735290f591e85fa4c677d7 100644 --- a/frameworks/base/BUILD.gn +++ b/frameworks/base/BUILD.gn @@ -95,6 +95,7 @@ template("ace_base_source_set") { defines -= [ "UNICODE" ] libs = [ "//prebuilts/mingw-w64/ohos/linux-x86_64/clang-mingw/x86_64-w64-mingw32/lib/libshlwapi.a" ] } + defines += [ "OHOS_PLATFORM" ] if (is_arkui_x) { deps += [ diff --git a/frameworks/base/ressched/ressched_report.cpp b/frameworks/base/ressched/ressched_report.cpp index 3319257e39e49211cc97c5f0e7a206862876149e..d878145ac92940850f05a38c4a601d9a489502bb 100644 --- a/frameworks/base/ressched/ressched_report.cpp +++ b/frameworks/base/ressched/ressched_report.cpp @@ -14,6 +14,7 @@ */ #include "base/ressched/ressched_report.h" +#include namespace OHOS::Ace { namespace Ressched { @@ -98,6 +99,10 @@ void LoadAceApplicationContext(std::unordered_map& pay using namespace Ressched; +thread_local bool ResSchedReport::isInSlide_ = false; +thread_local bool ResSchedReport::isInTouch_ = false; +thread_local Offset ResSchedReport::averageDistance_; + ResSchedReport& ResSchedReport::GetInstance() { thread_local ResSchedReport instance; @@ -114,6 +119,13 @@ void ResSchedReport::ResSchedDataReport(const char* name, const std::unordered_m { std::unordered_map payload = param; payload[Ressched::NAME] = name; +#if !defined(MAC_PLATFOMR) && !defined(IOS_PLATFORM) && defined(OHOS_PLATFORM) + std::string tid = std::to_string(gettid()); + std::string pid = std::to_string(getpid()); + if (pid != tid) { + payload["scrTid"] = std::to_string(pthread_self()); + } +#endif if (!reportDataFunc_) { reportDataFunc_ = LoadReportDataFunc(); } @@ -362,8 +374,9 @@ void ResSchedReport::HandleTouchMove(const TouchEvent& touchEvent) { RecordTouchEvent(touchEvent); averageDistance_ += curTouchEvent_.offset - lastTouchEvent_.offset; - if (averageDistance_.GetDistance() >= ResDefine::JUDGE_DISTANCE && - !isInSlide_ && isInTouch_) { + bool ret = averageDistance_.GetDistance() >= ResDefine::JUDGE_DISTANCE && + !isInSlide_ && isInTouch_; + if (ret) { std::unordered_map payload; LoadAceApplicationContext(payload); ResSchedDataReport(RES_TYPE_SLIDE, SLIDE_DETECTING, payload); diff --git a/frameworks/base/ressched/ressched_report.h b/frameworks/base/ressched/ressched_report.h index 6c4cc0899adc50e3e375047feef7f88d430af80b..53875006b54fda04c59e5fa03bdce6c662ed5e1c 100644 --- a/frameworks/base/ressched/ressched_report.h +++ b/frameworks/base/ressched/ressched_report.h @@ -103,9 +103,9 @@ private: ResEventInfo lastTouchEvent_; ResEventInfo curAxisEvent_; ResEventInfo lastAxisEvent_; - Offset averageDistance_; - bool isInSlide_ = false; - bool isInTouch_ = false; + static thread_local Offset averageDistance_; + static thread_local bool isInSlide_; + static thread_local bool isInTouch_; double dpi_ = PipelineBase::GetCurrentDensity(); std::chrono::steady_clock::time_point startTimeMS = std::chrono::steady_clock::now(); std::chrono::steady_clock::time_point startTimeS = std::chrono::steady_clock::now();