1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 3cb93a386Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4cb93a386Sopenharmony_ci * you may not use this file except in compliance with the License. 5cb93a386Sopenharmony_ci * You may obtain a copy of the License at 6cb93a386Sopenharmony_ci * 7cb93a386Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8cb93a386Sopenharmony_ci * 9cb93a386Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10cb93a386Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11cb93a386Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12cb93a386Sopenharmony_ci * See the License for the specific language governing permissions and 13cb93a386Sopenharmony_ci * limitations under the License. 14cb93a386Sopenharmony_ci */ 15cb93a386Sopenharmony_ci 16cb93a386Sopenharmony_ci#include "src/core/SkPathComplexityDfx.h" 17cb93a386Sopenharmony_ci#include "src/core/SkTraceEvent.h" 18cb93a386Sopenharmony_ci 19cb93a386Sopenharmony_ci#ifdef SK_ENABLE_PATH_COMPLEXITY_DFX 20cb93a386Sopenharmony_ciconstexpr int PATH_TRACE_LEVEL = 1; 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_ciint GetDebugTraceLevel() 23cb93a386Sopenharmony_ci{ 24cb93a386Sopenharmony_ci static int openDebugTraceLevel = 25cb93a386Sopenharmony_ci std::atoi((OHOS::system::GetParameter("persist.sys.graphic.openDebugTrace", "0")).c_str()); 26cb93a386Sopenharmony_ci return openDebugTraceLevel; 27cb93a386Sopenharmony_ci} 28cb93a386Sopenharmony_ci 29cb93a386Sopenharmony_cibool IsShowPathComplexityEnabled() 30cb93a386Sopenharmony_ci{ 31cb93a386Sopenharmony_ci static bool enabled = 32cb93a386Sopenharmony_ci std::atoi((OHOS::system::GetParameter("persist.sys.graphic.showPathComplexity", "0")).c_str()) != 0; 33cb93a386Sopenharmony_ci return enabled; 34cb93a386Sopenharmony_ci} 35cb93a386Sopenharmony_ci 36cb93a386Sopenharmony_ci 37cb93a386Sopenharmony_civoid SkPathComplexityDfx::AddPathComplexityTrace(SkScalar complexity) 38cb93a386Sopenharmony_ci{ 39cb93a386Sopenharmony_ci if (GetDebugTraceLevel() >= PATH_TRACE_LEVEL) { 40cb93a386Sopenharmony_ci HITRACE_OHOS_NAME_FMT_ALWAYS("Path Complexity Debug: %f", complexity); 41cb93a386Sopenharmony_ci } 42cb93a386Sopenharmony_ci} 43cb93a386Sopenharmony_civoid SkPathComplexityDfx::ShowPathComplexityDfx(SkCanvas* canvas, const SkPath& path) 44cb93a386Sopenharmony_ci{ 45cb93a386Sopenharmony_ci if (!canvas) { 46cb93a386Sopenharmony_ci return; 47cb93a386Sopenharmony_ci } 48cb93a386Sopenharmony_ci 49cb93a386Sopenharmony_ci if (IsShowPathComplexityEnabled()) { 50cb93a386Sopenharmony_ci constexpr size_t MESSAGE_SIZE = 4; 51cb93a386Sopenharmony_ci constexpr SkScalar MESSAGE_FONT_SIZE = 30.0f; 52cb93a386Sopenharmony_ci constexpr SkScalar MARGIN_LENGTH = 10.0f; 53cb93a386Sopenharmony_ci 54cb93a386Sopenharmony_ci SkScalar complexity = 0.f; 55cb93a386Sopenharmony_ci SkScalar avgLength = 0.f; 56cb93a386Sopenharmony_ci compute_complexity(path, avgLength, complexity); 57cb93a386Sopenharmony_ci std::string message = std::to_string(complexity).substr(0, MESSAGE_SIZE); 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_ci SkFont tempFont; 60cb93a386Sopenharmony_ci tempFont.setSize(MESSAGE_FONT_SIZE / (std::abs(canvas->getTotalMatrix().get(0)) + 1e-3)); 61cb93a386Sopenharmony_ci SkPaint tempPaint; 62cb93a386Sopenharmony_ci tempPaint.setColor(SK_ColorRED); 63cb93a386Sopenharmony_ci canvas->drawSimpleText(message.c_str(), MESSAGE_SIZE, SkTextEncoding::kUTF8, 64cb93a386Sopenharmony_ci 0, MARGIN_LENGTH, tempFont, tempPaint); 65cb93a386Sopenharmony_ci } 66cb93a386Sopenharmony_ci} 67cb93a386Sopenharmony_ci#endif 68