| // Copyright 2018 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 "content/common/skia_utils.h" |
| |
| #include "base/command_line.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "base/sys_info.h" |
| #include "base/trace_event/memory_dump_manager.h" |
| #include "build/build_config.h" |
| #include "content/public/common/content_switches.h" |
| #include "skia/ext/event_tracer_impl.h" |
| #include "skia/ext/skia_memory_dump_provider.h" |
| #include "third_party/skia/include/core/SkGraphics.h" |
| |
| namespace content { |
| namespace { |
| |
| // Maximum allocation size allowed for image scaling filters that |
| // require pre-scaling. Skia will fallback to a filter that doesn't |
| // require pre-scaling if the default filter would require an |
| // allocation that exceeds this limit. |
| const size_t kImageCacheSingleAllocationByteLimit = 64 * 1024 * 1024; |
| |
| } // namespace |
| |
| void InitializeSkia() { |
| // Make sure that any switches used here are propagated to the renderer and |
| // GPU processes. |
| const base::CommandLine& cmd = *base::CommandLine::ForCurrentProcess(); |
| if (!cmd.HasSwitch(switches::kDisableSkiaRuntimeOpts)) { |
| SkGraphics::Init(); |
| } |
| |
| const int kMB = 1024 * 1024; |
| size_t font_cache_limit; |
| #if defined(OS_ANDROID) |
| font_cache_limit = base::SysInfo::IsLowEndDevice() ? kMB : 8 * kMB; |
| SkGraphics::SetFontCacheLimit(font_cache_limit); |
| #else |
| if (cmd.HasSwitch(switches::kSkiaFontCacheLimitMb)) { |
| if (base::StringToSizeT( |
| cmd.GetSwitchValueASCII(switches::kSkiaFontCacheLimitMb), |
| &font_cache_limit)) { |
| SkGraphics::SetFontCacheLimit(font_cache_limit * kMB); |
| } |
| } |
| |
| size_t resource_cache_limit; |
| if (cmd.HasSwitch(switches::kSkiaResourceCacheLimitMb)) { |
| if (base::StringToSizeT( |
| cmd.GetSwitchValueASCII(switches::kSkiaResourceCacheLimitMb), |
| &resource_cache_limit)) { |
| SkGraphics::SetResourceCacheTotalByteLimit(resource_cache_limit * kMB); |
| } |
| } |
| #endif |
| |
| InitSkiaEventTracer(); |
| base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( |
| skia::SkiaMemoryDumpProvider::GetInstance(), "Skia", nullptr); |
| |
| SkGraphics::SetResourceCacheSingleAllocationByteLimit( |
| kImageCacheSingleAllocationByteLimit); |
| } |
| |
| } // namespace content |