diff options
author | boliu <boliu@chromium.org> | 2014-08-29 11:59:10 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-08-29 19:00:24 +0000 |
commit | 6be0a91202392f026dc78d2df2b3a41616f70b70 (patch) | |
tree | 04d7283fd041491cc5978d74c42d5d8c8daab122 /android_webview | |
parent | 96ec01dcfbb16c1cc2240a24001482217ae241f6 (diff) | |
download | chromium_src-6be0a91202392f026dc78d2df2b3a41616f70b70.zip chromium_src-6be0a91202392f026dc78d2df2b3a41616f70b70.tar.gz chromium_src-6be0a91202392f026dc78d2df2b3a41616f70b70.tar.bz2 |
aw: Make force-gpu-mem-available-mb work
BUG=
Review URL: https://codereview.chromium.org/519593002
Cr-Commit-Position: refs/heads/master@{#292675}
Diffstat (limited to 'android_webview')
-rw-r--r-- | android_webview/browser/browser_view_renderer.cc | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/android_webview/browser/browser_view_renderer.cc b/android_webview/browser/browser_view_renderer.cc index 7a3c703..8a05474 100644 --- a/android_webview/browser/browser_view_renderer.cc +++ b/android_webview/browser/browser_view_renderer.cc @@ -20,6 +20,7 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/web_contents.h" #include "content/public/common/content_switches.h" +#include "gpu/command_buffer/service/gpu_switches.h" #include "third_party/skia/include/core/SkBitmap.h" #include "third_party/skia/include/core/SkCanvas.h" #include "third_party/skia/include/core/SkPicture.h" @@ -42,6 +43,7 @@ const int64 kFallbackTickTimeoutInMilliseconds = 100; const size_t kMemoryMultiplier = 20; const size_t kBytesPerPixel = 4; const size_t kMemoryAllocationStep = 5 * 1024 * 1024; +uint64 g_memory_override_in_bytes = 0u; // Used to calculate tile allocation. Determined experimentally. const size_t kTileMultiplier = 12; @@ -75,6 +77,19 @@ class TracedValue : public base::debug::ConvertableToTraceFormat { // static void BrowserViewRenderer::CalculateTileMemoryPolicy(bool use_zero_copy) { + CommandLine* cl = CommandLine::ForCurrentProcess(); + + // If the value was overridden on the command line, use the specified value. + bool client_hard_limit_bytes_overridden = + cl->HasSwitch(switches::kForceGpuMemAvailableMb); + if (client_hard_limit_bytes_overridden) { + base::StringToUint64( + base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( + switches::kForceGpuMemAvailableMb), + &g_memory_override_in_bytes); + g_memory_override_in_bytes *= 1024 * 1024; + } + if (!use_zero_copy) { // Use chrome's default tile size, which varies from 256 to 512. // Be conservative here and use the smallest tile size possible. @@ -85,7 +100,6 @@ void BrowserViewRenderer::CalculateTileMemoryPolicy(bool use_zero_copy) { return; } - CommandLine* cl = CommandLine::ForCurrentProcess(); const char kDefaultTileSize[] = "384"; if (!cl->HasSwitch(switches::kDefaultTileWidth)) @@ -180,6 +194,9 @@ BrowserViewRenderer::CalculateDesiredMemoryPolicy() { policy.bytes_limit = (policy.bytes_limit / kMemoryAllocationStep + 1) * kMemoryAllocationStep; + if (g_memory_override_in_bytes) + policy.bytes_limit = static_cast<size_t>(g_memory_override_in_bytes); + size_t tiles = width * height * kTileMultiplier / g_tile_area; // Round up to a multiple of kTileAllocationStep. The minimum number of tiles // is also kTileAllocationStep. |