Index: content/browser/gpu/gpu_memory_test.cc |
=================================================================== |
--- content/browser/gpu/gpu_memory_test.cc (revision 175756) |
+++ content/browser/gpu/gpu_memory_test.cc (working copy) |
@@ -1,178 +0,0 @@ |
-// Copyright (c) 2012 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/callback.h" |
-#include "base/command_line.h" |
-#include "base/path_service.h" |
-#include "content/public/browser/gpu_data_manager.h" |
-#include "content/public/browser/gpu_data_manager_observer.h" |
-#include "content/public/browser/web_contents.h" |
-#include "content/public/common/content_paths.h" |
-#include "content/public/common/content_switches.h" |
-#include "content/public/test/browser_test_utils.h" |
-#include "content/public/test/test_utils.h" |
-#include "content/shell/shell.h" |
-#include "content/test/content_browser_test.h" |
-#include "content/test/content_browser_test_utils.h" |
-#include "gpu/command_buffer/service/gpu_switches.h" |
-#include "net/base/net_util.h" |
- |
-namespace { |
- |
-// Run the tests with a memory limit of 256MB, and give |
-// and extra 24MB of wiggle-room for over-allocation. |
-const char* kMemoryLimitSwitch = "256"; |
-const size_t kMemoryLimit = 256; |
-const size_t kSingleTabLimit = 128; |
-const size_t kSingleTabMinimum = 64; |
-const size_t kWiggleRoom = 24; |
- |
-// Observer to report GPU memory usage when requested. |
-class GpuMemoryBytesAllocatedObserver |
- : public content::GpuDataManagerObserver { |
- public: |
- GpuMemoryBytesAllocatedObserver() |
- : bytes_allocated_(0) { |
- } |
- |
- virtual ~GpuMemoryBytesAllocatedObserver() { |
- } |
- |
- virtual void OnGpuInfoUpdate() OVERRIDE {} |
- |
- virtual void OnVideoMemoryUsageStatsUpdate( |
- const content::GPUVideoMemoryUsageStats& video_memory_usage_stats) |
- OVERRIDE { |
- bytes_allocated_ = video_memory_usage_stats.bytes_allocated; |
- message_loop_runner_->Quit(); |
- } |
- |
- size_t GetBytesAllocated() { |
- message_loop_runner_ = new content::MessageLoopRunner; |
- content::GpuDataManager::GetInstance()->AddObserver(this); |
- content::GpuDataManager::GetInstance()-> |
- RequestVideoMemoryUsageStatsUpdate(); |
- message_loop_runner_->Run(); |
- content::GpuDataManager::GetInstance()->RemoveObserver(this); |
- message_loop_runner_ = NULL; |
- return bytes_allocated_; |
- } |
- |
- private: |
- size_t bytes_allocated_; |
- scoped_refptr<content::MessageLoopRunner> message_loop_runner_; |
-}; |
- |
-class GpuMemoryTest : public content::ContentBrowserTest { |
- public: |
- GpuMemoryTest() |
- : allow_tests_to_run_(false), |
- has_used_first_shell_(false) { |
- } |
- virtual ~GpuMemoryTest() { |
- } |
- |
- virtual void SetUpInProcessBrowserTestFixture() { |
- FilePath test_dir; |
- ASSERT_TRUE(PathService::Get(content::DIR_TEST_DATA, &test_dir)); |
- gpu_test_dir_ = test_dir.AppendASCII("gpu"); |
- } |
- |
- virtual void SetUpCommandLine(CommandLine* command_line) { |
- command_line->AppendSwitch(switches::kEnableLogging); |
- command_line->AppendSwitch(switches::kForceCompositingMode); |
- command_line->AppendSwitchASCII(switches::kForceGpuMemAvailableMb, |
- kMemoryLimitSwitch); |
- // Only run this on GPU bots for now. These tests should work with |
- // any GPU process, but may be slow. |
- if (command_line->HasSwitch(switches::kUseGpuInTests)) { |
- allow_tests_to_run_ = true; |
- } |
- // Don't enable these tests on Android just yet (they use lots of memory and |
- // may not be stable). |
-#if defined(OS_ANDROID) |
- allow_tests_to_run_ = false; |
-#endif |
- } |
- |
- enum PageType { |
- PAGE_CSS3D, |
- PAGE_WEBGL, |
- }; |
- |
- // Load a page and consume a specified amount of GPU memory. |
- void LoadPage(content::Shell* shell_to_load, |
- PageType page_type, |
- size_t mb_to_use) { |
- FilePath url; |
- switch (page_type) { |
- case PAGE_CSS3D: |
- url = gpu_test_dir_.AppendASCII("mem_css3d.html"); |
- break; |
- case PAGE_WEBGL: |
- url = gpu_test_dir_.AppendASCII("mem_webgl.html"); |
- break; |
- } |
- |
- content::NavigateToURL(shell_to_load, net::FilePathToFileURL(url)); |
- std::ostringstream js_call; |
- js_call << "useGpuMemory("; |
- js_call << mb_to_use; |
- js_call << ");"; |
- content::DOMMessageQueue message_queue; |
- std::string message; |
- ASSERT_TRUE(content::ExecuteScript( |
- shell_to_load->web_contents(), js_call.str())); |
- ASSERT_TRUE(message_queue.WaitForMessage(&message)); |
- EXPECT_EQ("\"DONE_USE_GPU_MEMORY\"", message); |
- } |
- |
- // Create a new tab. |
- content::Shell* CreateNewTab() { |
- // The ContentBrowserTest will create one shell by default, use that one |
- // first so that we don't confuse the memory manager into thinking there |
- // are more windows than there are. |
- content::Shell* new_shell = |
- has_used_first_shell_ ? CreateBrowser() : shell(); |
- has_used_first_shell_ = true; |
- visible_shells_.insert(new_shell); |
- return new_shell; |
- } |
- |
- void SetTabBackgrounded(content::Shell* shell_to_background) { |
- ASSERT_TRUE( |
- visible_shells_.find(shell_to_background) != visible_shells_.end()); |
- visible_shells_.erase(shell_to_background); |
- shell_to_background->web_contents()->WasHidden(); |
- } |
- |
- size_t GetMemoryUsageMbytes() { |
- // TODO: This should wait until all effects of memory management complete. |
- // We will need to wait until all |
- // 1. pending commits from the main thread to the impl thread in the |
- // compositor complete (for visible compositors). |
- // 2. allocations that the renderer's impl thread will make due to the |
- // compositor and WebGL are completed. |
- // 3. pending GpuMemoryManager::Manage() calls to manage are made. |
- // 4. renderers' OnMemoryAllocationChanged callbacks in response to |
- // manager are made. |
- // Each step in this sequence can cause trigger the next (as a 1-2-3-4-1 |
- // cycle), so we will need to pump this cycle until it stabilizes. |
- GpuMemoryBytesAllocatedObserver observer; |
- observer.GetBytesAllocated(); |
- return observer.GetBytesAllocated() / 1048576; |
- } |
- |
- bool AllowTestsToRun() const { |
- return allow_tests_to_run_; |
- } |
- |
- private: |
- bool allow_tests_to_run_; |
- std::set<content::Shell*> visible_shells_; |
- bool has_used_first_shell_; |
- FilePath gpu_test_dir_; |
-}; |
- |
-} // namespace |