158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved. 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# found in the LICENSE file. 458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)import json 658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)import logging 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)from metrics import Metric 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)_COUNTER_NAMES = [ 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.OsMemoryAllocated', 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryNewSpaceBytesAvailable', 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryNewSpaceBytesCommitted', 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryNewSpaceBytesUsed', 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryOldPointerSpaceBytesAvailable', 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryOldPointerSpaceBytesCommitted', 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryOldPointerSpaceBytesUsed', 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryOldDataSpaceBytesAvailable', 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryOldDataSpaceBytesCommitted', 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryOldDataSpaceBytesUsed', 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryCodeSpaceBytesAvailable', 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryCodeSpaceBytesCommitted', 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryCodeSpaceBytesUsed', 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryMapSpaceBytesAvailable', 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryMapSpaceBytesCommitted', 2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryMapSpaceBytesUsed', 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryCellSpaceBytesAvailable', 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryCellSpaceBytesCommitted', 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryCellSpaceBytesUsed', 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryPropertyCellSpaceBytesAvailable', 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryPropertyCellSpaceBytesCommitted', 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryPropertyCellSpaceBytesUsed', 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryLoSpaceBytesAvailable', 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryLoSpaceBytesCommitted', 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.MemoryLoSpaceBytesUsed', 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_ACCESSOR_PAIR_TYPE', 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_ACCESS_CHECK_INFO_TYPE', 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_ALIASED_ARGUMENTS_ENTRY_TYPE', 3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_ALLOCATION_MEMENTO_TYPE', 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_ALLOCATION_SITE_TYPE', 4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_ASCII_INTERNALIZED_STRING_TYPE', 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_ASCII_STRING_TYPE', 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_BOX_TYPE', 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_BREAK_POINT_INFO_TYPE', 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_BYTE_ARRAY_TYPE', 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CALL_HANDLER_INFO_TYPE', 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CELL_TYPE', 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CODE_CACHE_TYPE', 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CODE_TYPE', 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CODE_TYPE-BINARY_OP_IC', 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CODE_TYPE-BUILTIN', 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CODE_TYPE-CALL_IC', 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CODE_TYPE-COMPARE_IC', 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CODE_TYPE-COMPARE_NIL_IC', 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CODE_TYPE-FUNCTION', 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CODE_TYPE-KEYED_CALL_IC', 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CODE_TYPE-KEYED_LOAD_IC', 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CODE_TYPE-KEYED_STORE_IC', 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CODE_TYPE-LOAD_IC', 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CODE_TYPE-OPTIMIZED_FUNCTION', 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CODE_TYPE-REGEXP', 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CODE_TYPE-STORE_IC', 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CODE_TYPE-STUB', 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CODE_TYPE-TO_BOOLEAN_IC', 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CONS_ASCII_INTERNALIZED_STRING_TYPE', 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CONS_ASCII_STRING_TYPE', 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CONS_INTERNALIZED_STRING_TYPE', 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_CONS_STRING_TYPE', 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_DEBUG_INFO_TYPE', 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_DECLARED_ACCESSOR_DESCRIPTOR_TYPE', 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_DECLARED_ACCESSOR_INFO_TYPE', 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_EXECUTABLE_ACCESSOR_INFO_TYPE', 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_EXTERNAL_ASCII_INTERNALIZED_STRING_TYPE', 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_EXTERNAL_ASCII_STRING_TYPE', 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_EXTERNAL_BYTE_ARRAY_TYPE', 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_EXTERNAL_DOUBLE_ARRAY_TYPE', 7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_EXTERNAL_FLOAT_ARRAY_TYPE', 7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_EXTERNAL_INTERNALIZED_STRING_TYPE', 7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE', 8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_EXTERNAL_INT_ARRAY_TYPE', 8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_EXTERNAL_PIXEL_ARRAY_TYPE', 8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_EXTERNAL_SHORT_ARRAY_TYPE', 8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_EXTERNAL_STRING_TYPE', 8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE', 8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE', 8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_EXTERNAL_UNSIGNED_INT_ARRAY_TYPE', 8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE', 8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_FILLER_TYPE', 8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_FIXED_ARRAY-DESCRIPTOR_ARRAY_SUB_TYPE', 9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_FIXED_ARRAY-DICTIONARY_ELEMENTS_SUB_TYPE', 9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_FIXED_ARRAY-DICTIONARY_PROPERTIES_SUB_TYPE', 9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_FIXED_ARRAY-FAST_ELEMENTS_SUB_TYPE', 9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_FIXED_ARRAY-FAST_PROPERTIES_SUB_TYPE', 9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_FIXED_ARRAY-MAP_CODE_CACHE_SUB_TYPE', 9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_FIXED_ARRAY-SCOPE_INFO_SUB_TYPE', 9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_FIXED_ARRAY-STRING_TABLE_SUB_TYPE', 9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_FIXED_ARRAY-TRANSITION_ARRAY_SUB_TYPE', 9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_FIXED_ARRAY_TYPE', 9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_FIXED_DOUBLE_ARRAY_TYPE', 10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_FOREIGN_TYPE', 10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_FREE_SPACE_TYPE', 10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_FUNCTION_TEMPLATE_INFO_TYPE', 10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_HEAP_NUMBER_TYPE', 10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_INTERCEPTOR_INFO_TYPE', 10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_INTERNALIZED_STRING_TYPE', 10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_ARRAY_BUFFER_TYPE', 10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_ARRAY_TYPE', 10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_BUILTINS_OBJECT_TYPE', 10958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_CONTEXT_EXTENSION_OBJECT_TYPE', 11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_DATA_VIEW_TYPE', 11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_DATE_TYPE', 11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_FUNCTION_PROXY_TYPE', 11358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_FUNCTION_TYPE', 11458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_GENERATOR_OBJECT_TYPE', 11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_GLOBAL_OBJECT_TYPE', 11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_GLOBAL_PROXY_TYPE', 11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_MAP_TYPE', 11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_MESSAGE_OBJECT_TYPE', 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_MODULE_TYPE', 12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_OBJECT_TYPE', 12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_PROXY_TYPE', 12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_REGEXP_TYPE', 12358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_SET_TYPE', 12458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_TYPED_ARRAY_TYPE', 12558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_VALUE_TYPE', 12658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_WEAK_MAP_TYPE', 12758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_JS_WEAK_SET_TYPE', 12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_MAP_TYPE', 12958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_OBJECT_TEMPLATE_INFO_TYPE', 13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_ODDBALL_TYPE', 13158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_POLYMORPHIC_CODE_CACHE_TYPE', 13258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_PROPERTY_CELL_TYPE', 13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_SCRIPT_TYPE', 13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_SHARED_FUNCTION_INFO_TYPE', 13558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_SHORT_EXTERNAL_ASCII_INTERNALIZED_STRING_TYPE', 13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_SHORT_EXTERNAL_ASCII_STRING_TYPE', 13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE', 13858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_SHORT_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE', 13958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_SHORT_EXTERNAL_STRING_TYPE', 14058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_SHORT_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE', 14158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_SIGNATURE_INFO_TYPE', 14258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_SLICED_ASCII_STRING_TYPE', 14358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_SLICED_STRING_TYPE', 14458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_STRING_TYPE', 14558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_SYMBOL_TYPE', 14658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_TYPE_FEEDBACK_INFO_TYPE', 14758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 'V8.SizeOf_TYPE_SWITCH_INFO_TYPE' 14858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ] 14958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 15058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class V8ObjectStatsMetric(Metric): 15158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) """V8ObjectStatsMetric gathers statistics on the size of types in the V8 heap. 15258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 15358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) It does this by enabling the --track_gc_object_stats flag on V8 and reading 15458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) these statistics from the StatsTableMetric. 15558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) """ 15658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 15758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) def __init__(self): 15858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) super(V8ObjectStatsMetric, self).__init__() 15958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) self._results = None 16058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 16158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @classmethod 16258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) def CustomizeBrowserOptions(cls, options): 16358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) options.AppendExtraBrowserArgs([ 16458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) '--enable-stats-table', 16558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) '--enable-benchmarking', 16658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) '--js-flags=--track_gc_object_stats --expose_gc', 16758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) # TODO(rmcilroy): This is needed for --enable-stats-table. Update once 16858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) # https://codereview.chromium.org/22911027/ lands. 16958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) '--no-sandbox' 17058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ]) 17158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 17258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @staticmethod 17358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) def GetV8StatsTable(tab, counters=None): 17458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) counters = counters or _COUNTER_NAMES 17558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 17658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return tab.EvaluateJavaScript(""" 17758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) (function(counters) { 17858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) var results = {}; 17958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!window.chrome || !window.chrome.benchmarking) 18058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return results; 18158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) window.gc(); // Trigger GC to ensure stats are checkpointed. 18258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (var i = 0; i < counters.length; i++) 18358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) results[counters[i]] = 18458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) chrome.benchmarking.counterForRenderer(counters[i]); 18558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return results; 18658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) })(%s); 18758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) """ % json.dumps(counters)) 18858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 18958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) def Start(self, page, tab): 19058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) """Do Nothing.""" 19158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) pass 19258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 19358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) def Stop(self, page, tab): 19458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) """Get the values in the stats table after the page is loaded.""" 19558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) self._results = V8ObjectStatsMetric.GetV8StatsTable(tab) 19658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if not self._results: 19758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) logging.warning('No V8 object stats from website: ' + page.display_name) 19858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 19958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) def AddResults(self, tab, results): 20058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) """Add results for this page to the results object.""" 20158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) assert self._results != None, 'Must call Stop() first' 20258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for counter_name in self._results: 20358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) results.Add(counter_name, 'kb', self._results[counter_name] / 1024.0) 204