1/* 2 * Copyright 2006 The Android Open Source Project 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8#include "src/core/SkUtils.h" 9#ifdef NOT_BUILD_FOR_OHOS_SDK 10#include <parameters.h> 11#endif 12 13const char SkHexadecimalDigits::gUpper[16] = 14 { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; 15const char SkHexadecimalDigits::gLower[16] = 16 { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; 17 18// vma cache 19static thread_local bool g_vmaCacheFlag = false; 20 21bool SkGetMemoryOptimizedFlag() 22{ 23 // global flag for vma cache 24#ifdef NOT_BUILD_FOR_OHOS_SDK 25 static bool g_memoryOptimizeFlag = OHOS::system::GetBoolParameter("sys.graphic.vma.opt", false); 26#else 27 static bool g_memoryOptimizeFlag = false; 28#endif 29 return g_memoryOptimizeFlag; 30} 31 32bool SkGetVmaCacheFlag() 33{ 34 if (!SkGetMemoryOptimizedFlag()) { 35 return false; 36 } 37 return g_vmaCacheFlag; 38} 39 40void SkSetVmaCacheFlag(bool flag) 41{ 42 g_vmaCacheFlag = flag; 43} 44 45#ifdef NOT_BUILD_FOR_OHOS_SDK 46int GetIntParamWithDefault(int paramValue, int maxValue, int defaultValue) 47{ 48 if (paramValue <= 0 || paramValue > maxValue) { 49 paramValue = defaultValue; // default value 50 } 51 return paramValue; 52} 53 54bool GetBoolParamWithFlag(bool paramValue) 55{ 56 if (!SkGetMemoryOptimizedFlag()) { 57 return false; 58 } 59 return paramValue; 60} 61#endif 62 63int SkGetVmaBlockSizeMB() 64{ 65#ifdef NOT_BUILD_FOR_OHOS_SDK 66 constexpr int DEFAULT_VMA_BLOCK_SIZE = 48; 67#ifdef USE_LARGE_VMA_BLOCK 68 constexpr int MAX_VMA_BLOCK_SIZE = 256; 69 static int g_vmaBlockSize = GetIntParamWithDefault( 70 std::atoi(OHOS::system::GetParameter("sys.graphic.vma.blockSize", "48").c_str()), 71 MAX_VMA_BLOCK_SIZE, DEFAULT_VMA_BLOCK_SIZE); 72#else 73 static int g_vmaBlockSize = DEFAULT_VMA_BLOCK_SIZE; 74#endif 75#else 76 static int g_vmaBlockSize = 4; // default value 77#endif 78 return g_vmaBlockSize; 79} 80 81int SkGetNeedCachedMemroySize() 82{ 83#ifdef NOT_BUILD_FOR_OHOS_SDK 84 constexpr int MAX_VMA_CACHE_MEMORY_SIZE = 512 * 1024 * 1024; 85 constexpr int DEFAULT_VMA_CACHE_MEMORY_SIZE = 9000000; 86 static int g_vmaCacheMemorySize = GetIntParamWithDefault( 87 std::atoi(OHOS::system::GetParameter("sys.graphic.vma.minCachedSize", "9000000").c_str()), 88 MAX_VMA_CACHE_MEMORY_SIZE, DEFAULT_VMA_CACHE_MEMORY_SIZE); 89#else 90 static int g_vmaCacheMemorySize = 0; // default value 91#endif 92 return g_vmaCacheMemorySize; 93} 94 95bool SkGetVmaDefragmentOn() 96{ 97#ifdef NOT_BUILD_FOR_OHOS_SDK 98 static bool g_vmaDefragmentFlag = 99 GetBoolParamWithFlag(OHOS::system::GetBoolParameter("sys.graphic.vma.defragment", true)); 100 return g_vmaDefragmentFlag; 101#else 102 return false; 103#endif 104} 105 106bool SkGetPreAllocFlag() 107{ 108#ifdef NOT_BUILD_FOR_OHOS_SDK 109 static bool g_vmaPreAllocFlag = 110 GetBoolParamWithFlag(OHOS::system::GetBoolParameter("sys.graphic.vma.preAlloc", false)); 111 return g_vmaPreAllocFlag; 112#else 113 return false; 114#endif 115} 116 117size_t SkGetPreAllocDelay() 118{ 119#ifdef NOT_BUILD_FOR_OHOS_SDK 120 constexpr int MAX_VMA_PREALLOC_DELAY = 5000; 121 constexpr int DEFAULT_VMA_PREALLOC_DELAY = 250; 122 static int g_vmaBlockCountMax = GetIntParamWithDefault( 123 std::atoi(OHOS::system::GetParameter("sys.graphic.vma.preAllocDelay", "250").c_str()), 124 MAX_VMA_PREALLOC_DELAY, DEFAULT_VMA_PREALLOC_DELAY); 125 return g_vmaBlockCountMax; 126#else 127 return SIZE_MAX; // default value 128#endif 129} 130 131size_t SkGetVmaBlockCountMax() 132{ 133#ifdef NOT_BUILD_FOR_OHOS_SDK 134 constexpr int MAX_VMA_BLOCK_COUNT_MAX = 4096; 135 constexpr int DEFAULT_VMA_BLOCK_COUNT_MAX = 10; 136 static int g_vmaBlockCountMax = GetIntParamWithDefault( 137 std::atoi(OHOS::system::GetParameter("sys.graphic.vma.maxBlockCount", "10").c_str()), 138 MAX_VMA_BLOCK_COUNT_MAX, DEFAULT_VMA_BLOCK_COUNT_MAX); 139 return g_vmaBlockCountMax; 140#else 141 return SIZE_MAX; // default value 142#endif 143} 144 145bool SkGetVmaDebugFlag() 146{ 147#ifdef NOT_BUILD_FOR_OHOS_SDK 148 static bool g_vmaDebugFlag = 149 GetBoolParamWithFlag(std::atoi(OHOS::system::GetParameter("sys.graphic.vma.debug", "0").c_str()) != 0); 150 return g_vmaDebugFlag; 151#else 152 return false; 153#endif 154} 155