123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387 |
- // Copyright 2016 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "base/trace_event/memory_infra_background_allowlist.h"
- #include <ctype.h>
- #include <string.h>
- #include <string>
- #include "base/allocator/buildflags.h"
- #include "base/strings/string_util.h"
- #include "build/build_config.h"
- namespace base {
- namespace trace_event {
- namespace {
- // The names of dump providers allowed to perform background tracing. Dump
- // providers can be added here only if the background mode dump has very
- // little processor and memory overhead.
- // TODO(ssid): Some dump providers do not create ownership edges on background
- // dump. So, the effective size will not be correct.
- // clang-format off
- const char* const kDumpProviderAllowlist[] = {
- "android::ResourceManagerImpl",
- "AutocompleteController",
- "BlinkGC",
- "BlinkObjectCounters",
- "BlobStorageContext",
- "Canvas",
- "ClientDiscardableSharedMemoryManager",
- "DevTools",
- "DiscardableSharedMemoryManager",
- "DOMStorage",
- "DownloadService",
- "ExtensionFunctions",
- "gpu::BufferManager",
- "gpu::RenderbufferManager",
- "gpu::ServiceDiscardableManager",
- "gpu::ServiceTransferCache",
- "gpu::SharedImageStub",
- "gpu::TextureManager",
- "GrShaderCache",
- "FontCaches",
- "HistoryReport",
- #if BUILDFLAG(IS_MAC)
- "CommandBuffer",
- #endif
- "IPCChannel",
- "IndexedDBBackingStore",
- "IndexedDBFactoryImpl",
- "InMemoryURLIndex",
- "JavaHeap",
- "LevelDB",
- "LeveldbValueStore",
- "LocalStorage",
- "MadvFreeDiscardableMemoryAllocator",
- "Malloc",
- "ManualFillingCache",
- "MemoryCache",
- "MojoHandleTable",
- "MojoLevelDB",
- "MojoMessages",
- "PartitionAlloc",
- "PartitionAlloc.AddressSpace",
- "ProcessMemoryMetrics",
- "SharedContextState",
- "SharedMemoryTracker",
- "Skia",
- "Sql",
- "URLRequestContext",
- "V8Isolate",
- "WebMediaPlayer_MainThread",
- "WebMediaPlayer_MediaThread",
- "SyncDirectory",
- "TabRestoreServiceHelper",
- nullptr // End of list marker.
- };
- // A list of string names that are allowed for the memory allocator dumps in
- // background mode.
- const char* const kAllocatorDumpNameAllowlist[] = {
- // Some of the blink values vary based on compile time flags. The compile
- // timeflags are not in base, so all are listed here.
- "blink_gc/main/allocated_objects",
- "blink_gc/main/heap",
- "blink_gc/workers/heap/worker_0x?",
- "blink_gc/workers/worker_0x?/heap",
- "blink_gc/workers/worker_0x?/allocated_objects",
- "blink_objects/AdSubframe",
- "blink_objects/ArrayBufferContents",
- "blink_objects/AudioHandler",
- "blink_objects/ContextLifecycleStateObserver",
- "blink_objects/DetachedScriptState",
- "blink_objects/Document",
- "blink_objects/Frame",
- "blink_objects/JSEventListener",
- "blink_objects/LayoutObject",
- "blink_objects/MediaKeySession",
- "blink_objects/MediaKeys",
- "blink_objects/Node",
- "blink_objects/Resource",
- "blink_objects/RTCPeerConnection",
- "blink_objects/ScriptPromise",
- "blink_objects/V8PerContextData",
- "blink_objects/WorkerGlobalScope",
- "blink_objects/UACSSResource",
- "blink_objects/ResourceFetcher",
- "canvas/ResourceProvider/SkSurface",
- "canvas/ResourceProvider/SkSurface/0x?",
- "components/download/controller_0x?",
- "devtools/file_watcher_0x?",
- "discardable",
- "discardable/madv_free_allocated",
- "discardable/child_0x?",
- "extensions/functions",
- "extensions/value_store/Extensions.Database.Open.Settings/0x?",
- "extensions/value_store/Extensions.Database.Open.Rules/0x?",
- "extensions/value_store/Extensions.Database.Open.State/0x?",
- "extensions/value_store/Extensions.Database.Open.Scripts/0x?",
- "extensions/value_store/Extensions.Database.Open.WebAppsLockScreen/0x?",
- "extensions/value_store/Extensions.Database.Open/0x?",
- "extensions/value_store/Extensions.Database.Restore/0x?",
- "extensions/value_store/Extensions.Database.Value.Restore/0x?",
- "font_caches/font_platform_data_cache",
- "font_caches/shape_caches",
- "gpu/discardable_cache/cache_0x?",
- "gpu/discardable_cache/cache_0x?/avg_image_size",
- "gpu/gl/buffers/context_group_0x?",
- "gpu/gl/renderbuffers/context_group_0x?",
- "gpu/gl/textures/context_group_0x?",
- "gpu/gr_shader_cache/cache_0x?",
- "gpu/shared_images/client_0x?",
- "gpu/transfer_cache/cache_0x?",
- "gpu/transfer_cache/cache_0x?/avg_image_size",
- "history/delta_file_service/leveldb_0x?",
- "history/usage_reports_buffer/leveldb_0x?",
- #if BUILDFLAG(IS_MAC)
- "ioaccelerator",
- "iosurface",
- #endif
- "java_heap",
- "java_heap/allocated_objects",
- "leveldatabase",
- "leveldatabase/block_cache/browser",
- "leveldatabase/block_cache/in_memory",
- "leveldatabase/block_cache/unified",
- "leveldatabase/block_cache/web",
- "leveldatabase/db_0x?",
- "leveldatabase/db_0x?/block_cache",
- "leveldatabase/memenv_0x?",
- "malloc",
- "malloc/allocated_objects",
- "malloc/metadata_fragmentation_caches",
- #if BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC)
- "malloc/partitions",
- "malloc/partitions/allocator",
- "malloc/partitions/allocator/thread_cache",
- "malloc/partitions/allocator/thread_cache/main_thread",
- "malloc/partitions/aligned",
- "malloc/partitions/original",
- "malloc/partitions/nonscannable",
- "malloc/partitions/nonquarantinable",
- "malloc/sys_malloc",
- "malloc/win_heap",
- #endif
- "media/webmediaplayer/audio/player_0x?",
- "media/webmediaplayer/data_source/player_0x?",
- "media/webmediaplayer/demuxer/player_0x?",
- "media/webmediaplayer/video/player_0x?",
- "media/webmediaplayer/player_0x?",
- "mojo",
- "mojo/data_pipe_consumer",
- "mojo/data_pipe_producer",
- "mojo/invitation",
- "mojo/messages",
- "mojo/message_pipe",
- "mojo/platform_handle",
- "mojo/queued_ipc_channel_message/0x?",
- "mojo/shared_buffer",
- "mojo/unknown",
- "mojo/watcher",
- "omnibox/autocomplete_controller/0x?",
- "omnibox/in_memory_url_index/0x?",
- "passwords/manual_filling_controller/0x?",
- "web_cache/Image_resources",
- "web_cache/CSS stylesheet_resources",
- "web_cache/Script_resources",
- "web_cache/XSL stylesheet_resources",
- "web_cache/Font_resources",
- "web_cache/Code_cache",
- "web_cache/Encoded_size_duplicated_in_data_urls",
- "web_cache/Other_resources",
- "partition_alloc/allocated_objects",
- "partition_alloc/address_space",
- "partition_alloc/partitions",
- "partition_alloc/partitions/array_buffer",
- "partition_alloc/partitions/buffer",
- "partition_alloc/partitions/fast_malloc",
- #if !BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC)
- "partition_alloc/partitions/fast_malloc/thread_cache",
- "partition_alloc/partitions/fast_malloc/thread_cache/main_thread",
- #endif
- "partition_alloc/partitions/layout",
- "skia/gpu_resources/context_0x?",
- "skia/sk_glyph_cache",
- "skia/sk_resource_cache",
- "sqlite",
- "ui/resource_manager_0x?/default_resource/0x?",
- "ui/resource_manager_0x?/tinted_resource",
- "site_storage/blob_storage/0x?",
- "v8/main/code_stats",
- "v8/main/contexts/detached_context",
- "v8/main/contexts/native_context",
- "v8/main/global_handles",
- "v8/main/heap/code_space",
- "v8/main/heap/code_stats",
- "v8/main/heap/code_large_object_space",
- "v8/main/heap/large_object_space",
- "v8/main/heap/map_space",
- "v8/main/heap/new_large_object_space",
- "v8/main/heap/new_space",
- "v8/main/heap/old_space",
- "v8/main/heap/read_only_space",
- "v8/main/malloc",
- "v8/main/zapped_for_debug",
- "v8/utility/code_stats",
- "v8/utility/contexts/detached_context",
- "v8/utility/contexts/native_context",
- "v8/utility/global_handles",
- "v8/utility/heap/code_space",
- "v8/utility/heap/code_large_object_space",
- "v8/utility/heap/large_object_space",
- "v8/utility/heap/map_space",
- "v8/utility/heap/new_large_object_space",
- "v8/utility/heap/new_space",
- "v8/utility/heap/old_space",
- "v8/utility/heap/read_only_space",
- "v8/utility/malloc",
- "v8/utility/zapped_for_debug",
- "v8/workers/code_stats/isolate_0x?",
- "v8/workers/contexts/detached_context/isolate_0x?",
- "v8/workers/contexts/native_context/isolate_0x?",
- "v8/workers/global_handles/isolate_0x?",
- "v8/workers/heap/code_space/isolate_0x?",
- "v8/workers/heap/code_large_object_space/isolate_0x?",
- "v8/workers/heap/large_object_space/isolate_0x?",
- "v8/workers/heap/map_space/isolate_0x?",
- "v8/workers/heap/new_large_object_space/isolate_0x?",
- "v8/workers/heap/new_space/isolate_0x?",
- "v8/workers/heap/old_space/isolate_0x?",
- "v8/workers/heap/read_only_space/isolate_0x?",
- "v8/workers/malloc/isolate_0x?",
- "v8/workers/zapped_for_debug/isolate_0x?",
- "site_storage/index_db/db_0x?",
- "site_storage/index_db/memenv_0x?",
- "site_storage/index_db/in_flight_0x?",
- "site_storage/local_storage/0x?/cache_size",
- "site_storage/localstorage/0x?/cache_size",
- "site_storage/localstorage/0x?/leveldb",
- "site_storage/session_storage/0x?",
- "site_storage/session_storage/0x?/cache_size",
- "sync/0x?/kernel",
- "sync/0x?/store",
- "sync/0x?/model_type/APP",
- "sync/0x?/model_type/APP_LIST",
- "sync/0x?/model_type/APP_SETTING",
- "sync/0x?/model_type/ARC_PACKAGE",
- "sync/0x?/model_type/AUTOFILL",
- "sync/0x?/model_type/AUTOFILL_PROFILE",
- "sync/0x?/model_type/AUTOFILL_WALLET",
- "sync/0x?/model_type/AUTOFILL_WALLET_OFFER",
- "sync/0x?/model_type/BOOKMARK",
- "sync/0x?/model_type/DEVICE_INFO",
- "sync/0x?/model_type/DICTIONARY",
- "sync/0x?/model_type/EXTENSION",
- "sync/0x?/model_type/EXTENSION_SETTING",
- "sync/0x?/model_type/HISTORY",
- "sync/0x?/model_type/HISTORY_DELETE_DIRECTIVE",
- "sync/0x?/model_type/MANAGED_USER",
- "sync/0x?/model_type/MANAGED_USER_SETTING",
- "sync/0x?/model_type/NIGORI",
- "sync/0x?/model_type/OS_PREFERENCE",
- "sync/0x?/model_type/OS_PRIORITY_PREFERENCE",
- "sync/0x?/model_type/PASSWORD",
- "sync/0x?/model_type/PREFERENCE",
- "sync/0x?/model_type/PRINTER",
- "sync/0x?/model_type/PRINTERS_AUTHORIZATION_SERVER",
- "sync/0x?/model_type/PRIORITY_PREFERENCE",
- "sync/0x?/model_type/READING_LIST",
- "sync/0x?/model_type/SEARCH_ENGINE",
- "sync/0x?/model_type/SECURITY_EVENT",
- "sync/0x?/model_type/SEND_TAB_TO_SELF",
- "sync/0x?/model_type/SESSION",
- "sync/0x?/model_type/SHARING_MESSAGE",
- "sync/0x?/model_type/THEME",
- "sync/0x?/model_type/TYPED_URL",
- "sync/0x?/model_type/USER_CONSENT",
- "sync/0x?/model_type/USER_EVENT",
- "sync/0x?/model_type/WALLET_METADATA",
- "sync/0x?/model_type/WEB_APP",
- "sync/0x?/model_type/WIFI_CONFIGURATION",
- "sync/0x?/model_type/WORKSPACE_DESK",
- "tab_restore/service_helper_0x?/entries",
- "tab_restore/service_helper_0x?/entries/group_0x?",
- "tab_restore/service_helper_0x?/entries/tab_0x?",
- "tab_restore/service_helper_0x?/entries/window_0x?",
- "tracing/heap_profiler_blink_gc/AllocationRegister",
- "tracing/heap_profiler_malloc/AllocationRegister",
- "tracing/heap_profiler_partition_alloc/AllocationRegister",
- nullptr // End of list marker.
- };
- // clang-format on
- const char* const* g_dump_provider_allowlist = kDumpProviderAllowlist;
- const char* const* g_allocator_dump_name_allowlist =
- kAllocatorDumpNameAllowlist;
- bool IsMemoryDumpProviderInList(const char* mdp_name, const char* const* list) {
- for (size_t i = 0; list[i] != nullptr; ++i) {
- if (strcmp(mdp_name, list[i]) == 0)
- return true;
- }
- return false;
- }
- } // namespace
- bool IsMemoryDumpProviderInAllowlist(const char* mdp_name) {
- return IsMemoryDumpProviderInList(mdp_name, g_dump_provider_allowlist);
- }
- bool IsMemoryAllocatorDumpNameInAllowlist(const std::string& name) {
- // Global dumps that are of hex digits are all allowed for background use.
- if (base::StartsWith(name, "global/", CompareCase::SENSITIVE)) {
- for (size_t i = strlen("global/"); i < name.size(); i++)
- if (!base::IsHexDigit(name[i]))
- return false;
- return true;
- }
- if (base::StartsWith(name, "shared_memory/", CompareCase::SENSITIVE)) {
- for (size_t i = strlen("shared_memory/"); i < name.size(); i++)
- if (!base::IsHexDigit(name[i]))
- return false;
- return true;
- }
- // Remove special characters, numbers (including hexadecimal which are marked
- // by '0x') from the given string.
- const size_t length = name.size();
- std::string stripped_str;
- stripped_str.reserve(length);
- bool parsing_hex = false;
- for (size_t i = 0; i < length; ++i) {
- if (parsing_hex && isxdigit(name[i]))
- continue;
- parsing_hex = false;
- if (i + 1 < length && name[i] == '0' && name[i + 1] == 'x') {
- parsing_hex = true;
- stripped_str.append("0x?");
- ++i;
- } else {
- stripped_str.push_back(name[i]);
- }
- }
- for (size_t i = 0; g_allocator_dump_name_allowlist[i] != nullptr; ++i) {
- if (stripped_str == g_allocator_dump_name_allowlist[i]) {
- return true;
- }
- }
- return false;
- }
- void SetDumpProviderAllowlistForTesting(const char* const* list) {
- g_dump_provider_allowlist = list;
- }
- void SetAllocatorDumpNameAllowlistForTesting(const char* const* list) {
- g_allocator_dump_name_allowlist = list;
- }
- } // namespace trace_event
- } // namespace base
|