diff --git a/BUILD.gn b/BUILD.gn index 9d52822395fcf63dfad6c62be46270b0d1b13c90..440514182f33f734047b206efc26d427ab33c517 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -52,7 +52,10 @@ config("skia_wno") { # Skia public API, generally provided by :skia. config("skia_public") { - include_dirs = [ "." ] + include_dirs = [ + ".", + "//base/hiviewdfx/hitrace/interfaces/native/innerkits/include/hitrace_meter", + ] defines = [ "NEW_SKIA" ] cflags_objcc = [] @@ -1292,12 +1295,16 @@ optional("typeface_freetype") { enabled = skia_use_freetype } - deps = [ "${skia_third_party_dir}/freetype2" ] + deps = [ + "${skia_third_party_dir}/freetype2", + "//base/hiviewdfx/hitrace/interfaces/native/innerkits:hitrace_meter", + ] sources = [ "src/ports/SkFontHost_FreeType.cpp", "src/ports/SkFontHost_FreeType_common.cpp", "src/ports/SkFontHost_FreeType_common.h", ] + include_dirs = [ "//base/hiviewdfx/hitrace/interfaces/native/innerkits/include/hitrace_meter" ] } optional("webp_decode") { @@ -1786,7 +1793,10 @@ if (use_oh_skia) { part_name = "third_party_skia" subsystem_name = "thirdparty" - include_dirs = [ "${skia_third_party_dir}/externals/libgifcodec" ] + include_dirs = [ + "${skia_third_party_dir}/externals/libgifcodec", + "//base/hiviewdfx/hitrace/interfaces/native/innerkits/include/hitrace_meter", + ] public_configs = [ ":skia_public" ] configs = skia_library_configs public_deps = [ @@ -1941,7 +1951,10 @@ if (use_oh_skia) { } if (is_ohos) { sources += [ "//third_party/skia/src/ports/SkDebug_ohos.cpp" ] - external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + external_deps = [ + "hiviewdfx_hilog_native:libhilog", + "hitrace_native:hitrace_meter", + ] } if (is_android) { diff --git a/src/core/SkATrace.cpp b/src/core/SkATrace.cpp index 87cdca92890d115c11ac5b58cce873ccbb2526e4..c6383d3a813e3fe2b6ad5ab39be620f9eda50707 100644 --- a/src/core/SkATrace.cpp +++ b/src/core/SkATrace.cpp @@ -79,5 +79,10 @@ bool SkAndroidFrameworkTraceUtil::gEnableAndroidTracing = false; #endif //SK_BUILD_FOR_ANDROID_FRAMEWORK +#ifdef SK_BUILD_FOR_OHOS +bool SkOHOSTraceUtil::gEnableTracing = false; +uint64_t SkOHOSTraceUtil::opsCount = 0; +std::unordered_map SkOHOSTraceUtil::opsCountUmap = {}; +#endif // SK_BUILD_FOR_OHOS diff --git a/src/core/SkTraceEventCommon.h b/src/core/SkTraceEventCommon.h index db46692415061ba44395dd60ce6c64c23f881976..83a6dec35eadd8cf5ae33e39c6eb7ab16bc18589 100644 --- a/src/core/SkTraceEventCommon.h +++ b/src/core/SkTraceEventCommon.h @@ -60,7 +60,7 @@ #define TRACE_EMPTY do {} while (0) #ifdef SK_DISABLE_TRACING - +#define HITRACE_OHOS(name) TRACE_EMPTY #define ATRACE_ANDROID_FRAMEWORK(fmt, ...) TRACE_EMPTY #define ATRACE_ANDROID_FRAMEWORK_ALWAYS(fmt, ...) TRACE_EMPTY #define TRACE_EVENT0(cg, n) TRACE_EMPTY @@ -74,7 +74,7 @@ #define TRACE_COUNTER2(cg, n, v1n, v1v, v2n, v2v) TRACE_EMPTY #elif defined(SK_BUILD_FOR_ANDROID_FRAMEWORK) - +#define HITRACE_OHOS(name) TRACE_EMPTY #include #include @@ -194,6 +194,94 @@ public: #define ATRACE_ANDROID_FRAMEWORK(fmt, ...) TRACE_EMPTY #define ATRACE_ANDROID_FRAMEWORK_ALWAYS(fmt, ...) TRACE_EMPTY +#ifdef SK_BUILD_FOR_OHOS + +#include +#include +#include +#include +#include + +#include "hitrace_meter.h" + +class SkOHOSTraceUtil { +public: + using Pair = std::pair; + + explicit SkOHOSTraceUtil(const char *name) { + StartTraceDebug(gEnableTracing, HITRACE_TAG_GRAPHIC_AGP, name, 0); + } + + ~SkOHOSTraceUtil() { + FinishTraceDebug(gEnableTracing, HITRACE_TAG_GRAPHIC_AGP); + } + + static void setEnableTracing(const bool &enableTracing) { + gEnableTracing = enableTracing; + } + + static bool getEnableTracing() { + return gEnableTracing; + } + + static void clearOpsCount() { + opsCount = 0; + opsCountUmap.clear(); + } + + static void addOpsCount(const std::string &op) { + opsCount++; + opsCountUmap[op]++; + } + + static uint64_t getOpsCount() { + return opsCount; + } + + static std::unordered_map getOpsCountUmap() { + return opsCountUmap; + } + + static std::vector getOpsCountVector(const bool &sort_cnt = true) { + std::vector opsCountVtr; + for (const auto& opItem : opsCountUmap) { + opsCountVtr.push_back(std::make_pair(opItem.first, opItem.second)); + } + if (sort_cnt) { + std::sort(opsCountVtr.begin(), opsCountVtr.end(), [](const Pair &opItemX, const Pair &opItemY) -> bool { + return opItemX.second > opItemY.second; + }); + } + return opsCountVtr; + } + +private: + static bool gEnableTracing; + static uint64_t opsCount; + static std::unordered_map opsCountUmap; +}; + +// Records a pair of begin and end events called "name" for the current scope, with 0, 1 or 2 +// associated arguments. If the category is not enabled, then this does nothing. +#define TRACE_EVENT0(category_group, name) \ + SkOHOSTraceUtil _trace(name); \ + INTERNAL_TRACE_EVENT_ADD_SCOPED(category_group, name) + +#define TRACE_EVENT0_ALWAYS(category_group, name) \ + SkOHOSTraceUtil _trace(name); \ + INTERNAL_TRACE_EVENT_ADD_SCOPED(category_group, name) + +#define TRACE_EVENT1(category_group, name, arg1_name, arg1_val) \ + SkOHOSTraceUtil _trace(name); \ + INTERNAL_TRACE_EVENT_ADD_SCOPED(category_group, name, arg1_name, arg1_val) + +#define TRACE_EVENT2(category_group, name, arg1_name, arg1_val, arg2_name, arg2_val) \ + SkOHOSTraceUtil _trace(name); \ + INTERNAL_TRACE_EVENT_ADD_SCOPED(category_group, name, arg1_name, arg1_val, arg2_name, arg2_val) + +#define HITRACE_OHOS(name) SkOHOSTraceUtil __trace(name) +#else // !SK_BUILD_FOR_OHOS + // Records a pair of begin and end events called "name" for the current scope, with 0, 1 or 2 // associated arguments. If the category is not enabled, then this does nothing. @@ -209,6 +297,9 @@ public: #define TRACE_EVENT2(category_group, name, arg1_name, arg1_val, arg2_name, arg2_val) \ INTERNAL_TRACE_EVENT_ADD_SCOPED(category_group, name, arg1_name, arg1_val, arg2_name, arg2_val) +#define HITRACE_OHOS(name) TRACE_EMPTY + +#endif // SK_BUILD_FOR_OHOS // Records a single event called "name" immediately, with 0, 1 or 2 associated arguments. If the // category is not enabled, then this does nothing. #define TRACE_EVENT_INSTANT0(category_group, name, scope) \ diff --git a/src/gpu/ops/OpsTask.cpp b/src/gpu/ops/OpsTask.cpp index bd7ee8bd4336a59f889372cd2475255039c49b79..b9609a33b5493a037cdb818a2aec589489d7bd85 100644 --- a/src/gpu/ops/OpsTask.cpp +++ b/src/gpu/ops/OpsTask.cpp @@ -658,7 +658,9 @@ bool OpsTask::onExecute(GrOpFlushState* flushState) { if (grGpu && tag.isGrTagValid()) { grGpu->setCurrentGrResourceTag(tag); } - +#ifdef SK_BUILD_FOR_OHOS + SkOHOSTraceUtil::addOpsCount(chain.head()->name()); +#endif GrOpFlushState::OpArgs opArgs(chain.head(), dstView, fUsesMSAASurface,