Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(663)

Unified Diff: content/test/gpu/gpu_tests/memory.py

Issue 555703005: Revert of Telemetry: Fix exact_matches in telemetry.test_runner. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/test/gpu/gpu_tests/gpu_rasterization.py ('k') | content/test/gpu/gpu_tests/memory_expectations.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/test/gpu/gpu_tests/memory.py
diff --git a/content/test/gpu/gpu_tests/memory.py b/content/test/gpu/gpu_tests/memory.py
new file mode 100644
index 0000000000000000000000000000000000000000..c8eadc426c25257d8e0153dea2f6e44297906c5a
--- /dev/null
+++ b/content/test/gpu/gpu_tests/memory.py
@@ -0,0 +1,114 @@
+# 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.
+import memory_expectations
+import page_sets
+
+from telemetry import benchmark
+from telemetry.page import page_test
+from telemetry.core.platform import tracing_category_filter
+from telemetry.core.platform import tracing_options
+from telemetry.timeline import counter
+from telemetry.timeline import model
+
+MEMORY_LIMIT_MB = 192
+SINGLE_TAB_LIMIT_MB = 192
+WIGGLE_ROOM_MB = 12
+
+test_harness_script = r"""
+ var domAutomationController = {};
+ domAutomationController._finished = false;
+
+ domAutomationController.send = function(msg) {
+ // 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.
+
+ // Pump the cycle 8 times (in principle it could take an infinite number
+ // of iterations to settle).
+
+ var rafCount = 0;
+
+ // Impl-side painting has changed the behavior of this test.
+ // Currently the background of the page shows up checkerboarded
+ // initially, causing the test to fail because the memory
+ // allocation is too low (no root layer). Temporarily increase the
+ // rAF count to 32 in order to make the test work reliably again.
+ // crbug.com/373098
+ // TODO(kbr): revert this change and put it back to 8 iterations.
+ var totalRafCount = 32;
+
+ function pumpRAF() {
+ if (rafCount == totalRafCount) {
+ domAutomationController._finished = true;
+ return;
+ }
+ ++rafCount;
+ window.requestAnimationFrame(pumpRAF);
+ }
+ pumpRAF();
+ }
+
+ window.domAutomationController = domAutomationController;
+
+ window.addEventListener("load", function() {
+ useGpuMemory(%d);
+ }, false);
+""" % MEMORY_LIMIT_MB
+
+class _MemoryValidator(page_test.PageTest):
+ def ValidateAndMeasurePage(self, page, tab, results):
+ timeline_data = tab.browser.platform.tracing_controller.Stop()
+ timeline_model = model.TimelineModel(timeline_data)
+ for process in timeline_model.GetAllProcesses():
+ if 'gpu.GpuMemoryUsage' in process.counters:
+ counter = process.GetCounter('gpu', 'GpuMemoryUsage')
+ mb_used = counter.samples[-1] / 1048576
+
+ if mb_used + WIGGLE_ROOM_MB < SINGLE_TAB_LIMIT_MB:
+ raise page_test.Failure(self._FormatException('low', mb_used))
+
+ if mb_used - WIGGLE_ROOM_MB > MEMORY_LIMIT_MB:
+ raise page_test.Failure(self._FormatException('high', mb_used))
+
+ def CustomizeBrowserOptions(self, options):
+ options.AppendExtraBrowserArgs('--enable-logging')
+ options.AppendExtraBrowserArgs(
+ '--force-gpu-mem-available-mb=%s' % MEMORY_LIMIT_MB)
+
+ def WillNavigateToPage(self, page, tab):
+ # FIXME: Remove webkit.console when blink.console lands in chromium and the
+ # ref builds are updated. crbug.com/386847
+ custom_categories = ['webkit.console', 'blink.console', 'gpu']
+ category_filter = tracing_category_filter.TracingCategoryFilter()
+ for c in custom_categories:
+ category_filter.AddIncludedCategory(c)
+ options = tracing_options.TracingOptions()
+ options.enable_chrome_trace = True
+ tab.browser.platform.tracing_controller.Start(options, category_filter, 60)
+
+ def _FormatException(self, low_or_high, mb_used):
+ return 'Memory allocation too %s (was %d MB, should be %d MB +/- %d MB)' % (
+ low_or_high, mb_used, SINGLE_TAB_LIMIT_MB, WIGGLE_ROOM_MB)
+
+class Memory(benchmark.Benchmark):
+ """Tests GPU memory limits"""
+ test = _MemoryValidator
+ page_set = page_sets.MemoryTestsPageSet
+
+ def CreateExpectations(self, page_set):
+ return memory_expectations.MemoryExpectations()
+
+ def CreatePageSet(self, options):
+ page_set = super(Memory, self).CreatePageSet(options)
+ for page in page_set.pages:
+ page.script_to_evaluate_on_commit = test_harness_script
+ return page_set
« no previous file with comments | « content/test/gpu/gpu_tests/gpu_rasterization.py ('k') | content/test/gpu/gpu_tests/memory_expectations.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698