diff --git a/tools/android/eclipse/.classpath b/tools/android/eclipse/.classpath index 4c075c2b..393bd67c 100644 --- a/tools/android/eclipse/.classpath +++ b/tools/android/eclipse/.classpath
@@ -52,6 +52,7 @@ <classpathentry kind="src" path="components/invalidation/impl/android/java/src"/> <classpathentry kind="src" path="components/invalidation/impl/android/javatests/src"/> <classpathentry kind="src" path="components/invalidation/impl/android/junit/src"/> + <classpathentry kind="src" path="components/location/android/java/src"/> <classpathentry kind="src" path="components/navigation_interception/android/java/src"/> <classpathentry kind="src" path="components/ntp_tiles/android/java/src"/> <classpathentry kind="src" path="components/policy/android/java/src"/> @@ -108,6 +109,8 @@ <classpathentry kind="src" path="third_party/gif_player/src"/> <classpathentry kind="src" path="third_party/jmake/src"/> <classpathentry kind="src" path="third_party/junit/src/src/main/java"/> + <classpathentry kind="src" path="third_party/leakcanary/src/leakcanary-android/src/main/java"/> + <classpathentry kind="src" path="third_party/leakcanary/src/leakcanary-watcher/src/main/java"/> <classpathentry kind="src" path="third_party/mockito/src/src/main/java"/> <classpathentry kind="src" path="third_party/robolectric/robolectric/robolectric/src/main/java"/> <classpathentry kind="src" path="third_party/robolectric/robolectric/robolectric/src/main/java"/>
diff --git a/tools/cfi/blacklist.txt b/tools/cfi/blacklist.txt index 7cd0b41..fee115d8 100644 --- a/tools/cfi/blacklist.txt +++ b/tools/cfi/blacklist.txt
@@ -133,26 +133,6 @@ fun:*LayoutTreeBuilderForElement*createLayoutObject* fun:*EventTarget*hasEventListeners* fun:*HTMLCollection*invalidateCacheForAttribute* -fun:*InlineBox*destroy* -fun:*InlineBox*moveInLogicalDirection* -fun:*InlineFlowBox*setConstructed* -fun:*LayoutBlock*createsNewFormattingContext* -fun:*LayoutBlock*computeChildPreferredLogicalWidth* -fun:*LayoutBlock*computePreferredLogicalWidths* -fun:*LayoutBlock*computeOverflow* -fun:*LayoutBlock*logicalLeftOffsetForContent* -fun:*LayoutBlock*marginAfterForChild* -fun:*LayoutBlock*marginBeforeForChild* -fun:*LayoutBlock*marginStartForChild* -fun:*LayoutBlock*updateLogicalWidthAndColumnWidth* -fun:*LayoutBlockFlow*computeInlinePreferredLogicalWidths* -fun:*LayoutBlockFlow*determineLogicalLeftPositionForChild* -fun:*LayoutBlockFlow*layoutBlockFlow* -fun:*LayoutBlockFlow*layoutInlineChildren* -fun:*LayoutBlockFlow*marginBeforeEstimateForChild* -fun:*LayoutBlockFlow*rebuildFloatsFromIntruding* -fun:*LayoutBlockFlow*yPositionForFloatIncludingMargin* -fun:*LayoutBlockFlow*styleDidChange* fun:*LayoutBoxModelObject*borderAndPaddingHeight* fun:*LayoutBoxModelObject*borderAndPaddingWidth* fun:*LayoutBoxModelObject*borderAndPaddingBefore*
diff --git a/tools/checkbins/checkbins.py b/tools/checkbins/checkbins.py index ec95578..98eef13 100755 --- a/tools/checkbins/checkbins.py +++ b/tools/checkbins/checkbins.py
@@ -29,10 +29,8 @@ # Please do not add your file here without confirming that it indeed doesn't # require /NXCOMPAT and /DYNAMICBASE. Contact cpu@chromium.org or your local # Windows guru for advice. -EXCLUDED_FILES = ['chrome_frame_mini_installer.exe', - 'mini_installer.exe', - 'next_version_mini_installer.exe', - 'wow_helper.exe' +EXCLUDED_FILES = ['mini_installer.exe', + 'next_version_mini_installer.exe' ] def IsPEFile(path):
diff --git a/tools/checklicenses/checklicenses.py b/tools/checklicenses/checklicenses.py index 957f4ae..3d27b0f2 100755 --- a/tools/checklicenses/checklicenses.py +++ b/tools/checklicenses/checklicenses.py
@@ -231,11 +231,6 @@ 'UNKNOWN', ], - # https://mail.python.org/pipermail/cython-devel/2014-July/004062.html - 'third_party/cython': [ - 'UNKNOWN', - ], - 'third_party/devscripts': [ 'GPL (v2 or later)', ],
diff --git a/tools/chrome_proxy/integration_tests/chrome_proxy_pagesets/lo_fi.py b/tools/chrome_proxy/integration_tests/chrome_proxy_pagesets/lo_fi.py index ab154b7f..456d219 100644 --- a/tools/chrome_proxy/integration_tests/chrome_proxy_pagesets/lo_fi.py +++ b/tools/chrome_proxy/integration_tests/chrome_proxy_pagesets/lo_fi.py
@@ -10,6 +10,8 @@ """ A test page for the chrome proxy Lo-Fi tests. Checks that the compressed image is below a certain threshold. + The test page is uncacheable otherwise a cached page may be served that + doesn't have the correct via headers. """ def __init__(self, url, page_set): @@ -23,7 +25,7 @@ super(LoFiStorySet, self).__init__() urls_list = [ - 'http://check.googlezip.net/cacheable/test.html', + 'http://check.googlezip.net/static/index.html', ] for url in urls_list:
diff --git a/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp b/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp index ca6bb18a..ba5ba4a 100644 --- a/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp +++ b/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp
@@ -177,13 +177,6 @@ if (!info) return; - // Check consistency of stack-allocated hierarchies. - if (info->IsStackAllocated()) { - for (auto& base : info->GetBases()) - if (!base.second.info()->IsStackAllocated()) - reporter_.DerivesNonStackAllocated(info, &base.second); - } - if (CXXMethodDecl* trace = info->GetTraceMethod()) { if (trace->isPure()) reporter_.ClassDeclaresPureVirtualTrace(info, trace); @@ -206,6 +199,17 @@ } if (info->IsGCDerived()) { + // It is illegal for a class to be both stack allocated and garbage + // collected. + if (info->IsStackAllocated()) { + for (auto& base : info->GetBases()) { + RecordInfo* base_info = base.second.info(); + if (Config::IsGCBase(base_info->name()) || base_info->IsGCDerived()) { + reporter_.StackAllocatedDerivesGarbageCollected(info, &base.second); + } + } + } + if (!info->IsGCMixin()) { CheckLeftMostDerived(info); CheckDispatch(info);
diff --git a/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp b/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp index ef3a37d..bd46f2c 100644 --- a/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp +++ b/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp
@@ -127,9 +127,9 @@ const char kManualDispatchMethodNote[] = "[blink-gc] Manual dispatch %0 declared here:"; -const char kDerivesNonStackAllocated[] = +const char kStackAllocatedDerivesGarbageCollected[] = "[blink-gc] Stack-allocated class %0 derives class %1" - " which is not stack allocated."; + " which is garbage collected."; const char kClassOverridesNew[] = "[blink-gc] Garbage collected class %0" @@ -197,8 +197,8 @@ diagnostic_.getCustomDiagID(getErrorLevel(), kMissingTraceDispatch); diag_missing_finalize_dispatch_ = diagnostic_.getCustomDiagID(getErrorLevel(), kMissingFinalizeDispatch); - diag_derives_non_stack_allocated_ = - diagnostic_.getCustomDiagID(getErrorLevel(), kDerivesNonStackAllocated); + diag_stack_allocated_derives_gc_ = diagnostic_.getCustomDiagID( + getErrorLevel(), kStackAllocatedDerivesGarbageCollected); diag_class_overrides_new_ = diagnostic_.getCustomDiagID(getErrorLevel(), kClassOverridesNew); diag_class_declares_pure_virtual_trace_ = diagnostic_.getCustomDiagID( @@ -453,11 +453,11 @@ ReportDiagnostic(dispatch->getLocStart(), error) << receiver->record(); } -void DiagnosticsReporter::DerivesNonStackAllocated( +void DiagnosticsReporter::StackAllocatedDerivesGarbageCollected( RecordInfo* info, BasePoint* base) { ReportDiagnostic(base->spec().getLocStart(), - diag_derives_non_stack_allocated_) + diag_stack_allocated_derives_gc_) << info->record() << base->info()->record(); }
diff --git a/tools/clang/blink_gc_plugin/DiagnosticsReporter.h b/tools/clang/blink_gc_plugin/DiagnosticsReporter.h index 5bb94d7..ae4fd00 100644 --- a/tools/clang/blink_gc_plugin/DiagnosticsReporter.h +++ b/tools/clang/blink_gc_plugin/DiagnosticsReporter.h
@@ -54,7 +54,7 @@ RecordInfo* receiver); void MissingFinalizeDispatch(const clang::FunctionDecl* dispatch, RecordInfo* receiver); - void DerivesNonStackAllocated(RecordInfo* info, BasePoint* base); + void StackAllocatedDerivesGarbageCollected(RecordInfo* info, BasePoint* base); void ClassOverridesNew(RecordInfo* info, clang::CXXMethodDecl* newop); void ClassDeclaresPureVirtualTrace(RecordInfo* info, clang::CXXMethodDecl* trace); @@ -107,7 +107,7 @@ unsigned diag_virtual_and_manual_dispatch_; unsigned diag_missing_trace_dispatch_; unsigned diag_missing_finalize_dispatch_; - unsigned diag_derives_non_stack_allocated_; + unsigned diag_stack_allocated_derives_gc_; unsigned diag_class_overrides_new_; unsigned diag_class_declares_pure_virtual_trace_; unsigned diag_left_most_base_must_be_polymorphic_;
diff --git a/tools/clang/blink_gc_plugin/tests/stack_allocated.h b/tools/clang/blink_gc_plugin/tests/stack_allocated.h index 88c01ab1..10d8f41 100644 --- a/tools/clang/blink_gc_plugin/tests/stack_allocated.h +++ b/tools/clang/blink_gc_plugin/tests/stack_allocated.h
@@ -23,12 +23,6 @@ Member<HeapObject> m_obj; // Does not need tracing. }; -class AnotherStackObject : public PartObject { // Invalid base. - STACK_ALLOCATED(); -private: - StackObject m_part; // Can embed a stack allocated object. -}; - class HeapObject : public GarbageCollected<HeapObject> { public: void trace(Visitor*); @@ -36,10 +30,19 @@ StackObject m_part; // Cannot embed a stack allocated object. }; +// Cannot derive from both heap- and stack-allocated objects. +class DerivedHeapObject : public HeapObject, public StackObject { +}; + +// Cannot be stack-allocated and derive from a heap-allocated object. +class DerivedHeapObject2 : public HeapObject { + STACK_ALLOCATED(); +}; + // STACK_ALLOCATED is inherited. class DerivedStackObject : public StackObject { private: - AnotherStackObject m_anotherPart; // Also fine. + StackObject m_anotherPart; // Also fine. }; }
diff --git a/tools/clang/blink_gc_plugin/tests/stack_allocated.txt b/tools/clang/blink_gc_plugin/tests/stack_allocated.txt index 7fecd12f..c6bb373 100644 --- a/tools/clang/blink_gc_plugin/tests/stack_allocated.txt +++ b/tools/clang/blink_gc_plugin/tests/stack_allocated.txt
@@ -5,19 +5,28 @@ ./stack_allocated.h:17:5: note: [blink-gc] Untraced field 'm_obj' declared here: Member<HeapObject> m_obj; // Needs tracing. ^ -./stack_allocated.h:26:28: warning: [blink-gc] Stack-allocated class 'AnotherStackObject' derives class 'PartObject' which is not stack allocated. -class AnotherStackObject : public PartObject { // Invalid base. - ^ -./stack_allocated.h:32:1: warning: [blink-gc] Class 'HeapObject' contains invalid fields. +./stack_allocated.h:26:1: warning: [blink-gc] Class 'HeapObject' contains invalid fields. class HeapObject : public GarbageCollected<HeapObject> { ^ -./stack_allocated.h:36:5: note: [blink-gc] Stack-allocated field 'm_part' declared here: +./stack_allocated.h:30:5: note: [blink-gc] Stack-allocated field 'm_part' declared here: StackObject m_part; // Cannot embed a stack allocated object. ^ +./stack_allocated.h:34:27: warning: [blink-gc] Stack-allocated class 'DerivedHeapObject' derives class 'HeapObject' which is garbage collected. +class DerivedHeapObject : public HeapObject, public StackObject { + ^ +./stack_allocated.h:38:28: warning: [blink-gc] Stack-allocated class 'DerivedHeapObject2' derives class 'HeapObject' which is garbage collected. +class DerivedHeapObject2 : public HeapObject { + ^ +./stack_allocated.h:39:3: warning: [blink-gc] Garbage collected class 'DerivedHeapObject2' is not permitted to override its new operator. + STACK_ALLOCATED(); + ^ +./heap/stubs.h:149:5: note: expanded from macro 'STACK_ALLOCATED' + __attribute__((annotate("blink_stack_allocated"))) \ + ^ stack_allocated.cpp:12:1: warning: [blink-gc] Class 'AnonStackObject' contains invalid fields. class AnonStackObject : public StackObject { ^ stack_allocated.cpp:14:5: note: [blink-gc] Raw pointer field 'm_obj' to a GC managed class declared here: HeapObject* m_obj; ^ -4 warnings generated. +6 warnings generated.
diff --git a/tools/clang/plugins/ChromeClassTester.cpp b/tools/clang/plugins/ChromeClassTester.cpp index cd508068..b0cc3db 100644 --- a/tools/clang/plugins/ChromeClassTester.cpp +++ b/tools/clang/plugins/ChromeClassTester.cpp
@@ -16,6 +16,9 @@ #ifdef LLVM_ON_UNIX #include <sys/param.h> #endif +#if defined(LLVM_ON_WIN32) +#include <windows.h> +#endif using namespace clang; using chrome_checker::Options; @@ -130,16 +133,31 @@ #endif #if defined(LLVM_ON_WIN32) - std::replace(filename.begin(), filename.end(), '\\', '/'); + // Make path absolute. + if (options_.no_realpath) { + // This turns e.g. "gen/dir/file.cc" to "/gen/dir/file.cc" which lets the + // "/gen/" banned_dir work. + filename.insert(filename.begin(), '/'); + } else { + // The Windows dance: Convert to UTF-16, call GetFullPathNameW, convert back + DWORD size_needed = + MultiByteToWideChar(CP_UTF8, 0, filename.data(), -1, nullptr, 0); + std::wstring utf16(size_needed, L'\0'); + MultiByteToWideChar(CP_UTF8, 0, filename.data(), -1, + &utf16[0], size_needed); - // On Posix, realpath() has made the path absolute. On Windows, this isn't - // necessarily true, so prepend a '/' to the path to make sure the - // banned_directories_ loop below works correctly. - // This turns e.g. "gen/dir/file.cc" to "/gen/dir/file.cc" which lets the - // "/gen/" banned_dir work. - // This seems simpler than converting to utf16, calling GetFullPathNameW(), - // and converting back to utf8. - filename.insert(filename.begin(), '/'); + size_needed = GetFullPathNameW(utf16.data(), 0, nullptr, nullptr); + std::wstring full_utf16(size_needed, L'\0'); + GetFullPathNameW(utf16.data(), full_utf16.size(), &full_utf16[0], nullptr); + + size_needed = WideCharToMultiByte(CP_UTF8, 0, full_utf16.data(), -1, + nullptr, 0, nullptr, nullptr); + filename.resize(size_needed); + WideCharToMultiByte(CP_UTF8, 0, full_utf16.data(), -1, &filename[0], + size_needed, nullptr, nullptr); + } + + std::replace(filename.begin(), filename.end(), '\\', '/'); #endif for (const std::string& allowed_dir : allowed_directories_) {
diff --git a/tools/clang/plugins/FindBadConstructsAction.cpp b/tools/clang/plugins/FindBadConstructsAction.cpp index df9b57a..25382ec0 100644 --- a/tools/clang/plugins/FindBadConstructsAction.cpp +++ b/tools/clang/plugins/FindBadConstructsAction.cpp
@@ -59,8 +59,6 @@ options_.check_ipc = true; } else if (args[i] == "check-auto-raw-pointer") { options_.check_auto_raw_pointer = true; - } else if (args[i] == "check-implicit-copy-ctors") { - // This is deprecated and will be removed once the flag is not used. } else { parsed = false; llvm::errs() << "Unknown clang plugin argument: " << args[i] << "\n";
diff --git a/tools/clang/rewrite_to_chrome_style/OWNERS b/tools/clang/rewrite_to_chrome_style/OWNERS new file mode 100644 index 0000000..cc9ab9f --- /dev/null +++ b/tools/clang/rewrite_to_chrome_style/OWNERS
@@ -0,0 +1,3 @@ +danakj@chromium.org +dcheng@chromium.org +lukasza@chromium.org
diff --git a/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp b/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp index 5d6d0b9..3b42fc28 100644 --- a/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp +++ b/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp
@@ -59,6 +59,10 @@ return Node.isOverloadedOperator(); } +AST_MATCHER(clang::CXXMethodDecl, isInstanceMethod) { + return Node.isInstance(); +} + AST_MATCHER_P(clang::FunctionTemplateDecl, templatedDecl, clang::ast_matchers::internal::Matcher<clang::FunctionDecl>, @@ -178,8 +182,8 @@ clang::StringRef name = decl.getName(); // These methods should never be renamed. - static const char* kBlacklistMethods[] = {"trace", "lock", "unlock", - "try_lock"}; + static const char* kBlacklistMethods[] = {"trace", "traceImpl", "lock", + "unlock", "try_lock"}; for (const auto& b : kBlacklistMethods) { if (name == b) return true; @@ -286,16 +290,39 @@ return initializer->isEvaluatable(context); } +AST_MATCHER_P(clang::QualType, hasString, std::string, ExpectedString) { + return ExpectedString == Node.getAsString(); +} + bool GetNameForDecl(const clang::FunctionDecl& decl, clang::ASTContext& context, std::string& name) { name = decl.getName().str(); name[0] = clang::toUppercase(name[0]); - // https://crbug.com/582312: Prepend "Get" if method name conflicts with type. - const clang::IdentifierInfo* return_type = - decl.getReturnType().getBaseTypeIdentifier(); - if (return_type && return_type->getName() == name) + // Given + // class Foo {}; + // using Bar = Foo; + // Bar f1(); // <- |Bar| would be matched by hasString("Bar") below. + // Bar f2(); // <- |Bar| would be matched by hasName("Foo") below. + // |type_with_same_name_as_function| matcher matches Bar and Foo return types. + auto type_with_same_name_as_function = qualType(anyOf( + hasString(name), // hasString matches the type as spelled (Bar above). + hasDeclaration(namedDecl(hasName(name))))); // hasDeclaration matches + // resolved type (Foo above). + // |type_containing_same_name_as_function| matcher will match all of the + // return types below: + // - Foo foo() // Direct application of |type_with_same_name_as_function|. + // - Foo* foo() // |hasDescendant| traverses references/pointers. + // - RefPtr<Foo> foo() // |hasDescendant| traverses template arguments. + auto type_containing_same_name_as_function = + qualType(anyOf(type_with_same_name_as_function, + hasDescendant(type_with_same_name_as_function))); + // https://crbug.com/582312: Prepend "Get" if method name conflicts with + // return type. + auto conflict_matcher = + functionDecl(returns(type_containing_same_name_as_function)); + if (!match(conflict_matcher, decl, context).empty()) name = "Get" + name; return true; @@ -642,8 +669,10 @@ auto field_decl_matcher = id("decl", fieldDecl(in_blink_namespace)); auto is_type_trait_value = varDecl(hasName("value"), hasStaticStorageDuration(), isPublic(), - hasType(isConstQualified()), hasType(booleanType()), - unless(hasAncestor(recordDecl(has(functionDecl()))))); + hasType(isConstQualified()), hasType(type(anyOf( + booleanType(), enumType()))), + unless(hasAncestor(recordDecl( + has(cxxMethodDecl(isUserProvided(), isInstanceMethod())))))); auto var_decl_matcher = id("decl", varDecl(in_blink_namespace, unless(is_type_trait_value))); auto enum_member_decl_matcher =
diff --git a/tools/clang/rewrite_to_chrome_style/tests/fields-expected.cc b/tools/clang/rewrite_to_chrome_style/tests/fields-expected.cc index a739b7d..faef4ec 100644 --- a/tools/clang/rewrite_to_chrome_style/tests/fields-expected.cc +++ b/tools/clang/rewrite_to_chrome_style/tests/fields-expected.cc
@@ -75,13 +75,14 @@ namespace WTF { // We don't want to capitalize fields in type traits -// (i.e. no |value| -> |kValue| rename is undesirable below). +// (i.e. the |value| -> |kValue| rename is undesirable below). struct TypeTrait1 { static const bool value = true; }; // Some type traits are implemented as classes, not structs // (e.g. WTF::IsGarbageCollectedType or WTF::IsAssignable). +// We should not perform a |value| -> |kValue| rename in the type trait below. template <typename T> class TypeTrait2 { public: @@ -93,6 +94,57 @@ static const bool value = false; }; +// Some type traits have static methods. We should not perform +// a |value| -> |kValue| rename in the type trait below. +template <typename T, typename U> +struct IsSubclass { + private: + typedef char YesType; + struct NoType { + char padding[8]; + }; + + static YesType SubclassCheck(U*); + static NoType SubclassCheck(...); + static T* t_; + + public: + static const bool value = sizeof(SubclassCheck(t_)) == sizeof(YesType); +}; + +// Some type traits have deleted instance methods. We should not perform +// a |value| -> |kValue| rename in the type trait below. +template <typename U = void> +struct IsTraceableInCollection { + // Expanded from STATIC_ONLY(IsTraceableInCollection) macro: + private: + IsTraceableInCollection() = delete; + IsTraceableInCollection(const IsTraceableInCollection&) = delete; + IsTraceableInCollection& operator=(const IsTraceableInCollection&) = delete; + void* operator new(unsigned long) = delete; + void* operator new(unsigned long, void*) = delete; + + public: + static const bool value = true; +}; + +// Some type traits have a non-boolean value. +enum LifetimeManagementType { + kRefCountedLifetime, + kGarbageCollectedLifetime, +}; +template <typename T> +struct LifetimeOf { + private: + // Okay to rename |isGarbageCollected| to |kIsGarbageCollected|. + static const bool kIsGarbageCollected = true; + + public: + // Expecting no rename of |value|. + static const LifetimeManagementType value = + !kIsGarbageCollected ? kRefCountedLifetime : kGarbageCollectedLifetime; +}; + }; // namespace WTF void F() {
diff --git a/tools/clang/rewrite_to_chrome_style/tests/fields-original.cc b/tools/clang/rewrite_to_chrome_style/tests/fields-original.cc index 52dd12e0..726c521 100644 --- a/tools/clang/rewrite_to_chrome_style/tests/fields-original.cc +++ b/tools/clang/rewrite_to_chrome_style/tests/fields-original.cc
@@ -72,13 +72,14 @@ namespace WTF { // We don't want to capitalize fields in type traits -// (i.e. no |value| -> |kValue| rename is undesirable below). +// (i.e. the |value| -> |kValue| rename is undesirable below). struct TypeTrait1 { static const bool value = true; }; // Some type traits are implemented as classes, not structs // (e.g. WTF::IsGarbageCollectedType or WTF::IsAssignable). +// We should not perform a |value| -> |kValue| rename in the type trait below. template <typename T> class TypeTrait2 { public: @@ -90,6 +91,57 @@ static const bool value = false; }; +// Some type traits have static methods. We should not perform +// a |value| -> |kValue| rename in the type trait below. +template <typename T, typename U> +struct IsSubclass { + private: + typedef char YesType; + struct NoType { + char padding[8]; + }; + + static YesType subclassCheck(U*); + static NoType subclassCheck(...); + static T* t; + + public: + static const bool value = sizeof(subclassCheck(t)) == sizeof(YesType); +}; + +// Some type traits have deleted instance methods. We should not perform +// a |value| -> |kValue| rename in the type trait below. +template <typename U = void> +struct IsTraceableInCollection { + // Expanded from STATIC_ONLY(IsTraceableInCollection) macro: + private: + IsTraceableInCollection() = delete; + IsTraceableInCollection(const IsTraceableInCollection&) = delete; + IsTraceableInCollection& operator=(const IsTraceableInCollection&) = delete; + void* operator new(unsigned long) = delete; + void* operator new(unsigned long, void*) = delete; + + public: + static const bool value = true; +}; + +// Some type traits have a non-boolean value. +enum LifetimeManagementType { + RefCountedLifetime, + GarbageCollectedLifetime, +}; +template <typename T> +struct LifetimeOf { + private: + // Okay to rename |isGarbageCollected| to |kIsGarbageCollected|. + static const bool isGarbageCollected = true; + + public: + // Expecting no rename of |value|. + static const LifetimeManagementType value = + !isGarbageCollected ? RefCountedLifetime : GarbageCollectedLifetime; +}; + }; // namespace WTF void F() {
diff --git a/tools/clang/rewrite_to_chrome_style/tests/functions-expected.cc b/tools/clang/rewrite_to_chrome_style/tests/functions-expected.cc index 304e3ef..792c3d89 100644 --- a/tools/clang/rewrite_to_chrome_style/tests/functions-expected.cc +++ b/tools/clang/rewrite_to_chrome_style/tests/functions-expected.cc
@@ -4,6 +4,19 @@ namespace blink { +namespace { + +// Naive renaming will break the build, by leaving return type the same name as +// the function name - to avoid this "Get" prefix needs to be prepended as +// suggested in https://crbug.com/582312#c17. +class Foo582312 {}; +using Bar = Foo582312; +static Bar* GetBar() { + return nullptr; +} + +} // namespace + // Tests that the prototype for a function is updated. int TestFunctionThatTakesTwoInts(int x, int y); // Overload to test using declarations that introduce multiple shadow
diff --git a/tools/clang/rewrite_to_chrome_style/tests/functions-original.cc b/tools/clang/rewrite_to_chrome_style/tests/functions-original.cc index eb5e0ec..5f246031 100644 --- a/tools/clang/rewrite_to_chrome_style/tests/functions-original.cc +++ b/tools/clang/rewrite_to_chrome_style/tests/functions-original.cc
@@ -4,6 +4,19 @@ namespace blink { +namespace { + +// Naive renaming will break the build, by leaving return type the same name as +// the function name - to avoid this "Get" prefix needs to be prepended as +// suggested in https://crbug.com/582312#c17. +class Foo582312 {}; +using Bar = Foo582312; +static Bar* bar() { + return nullptr; +} + +} // namespace + // Tests that the prototype for a function is updated. int testFunctionThatTakesTwoInts(int x, int y); // Overload to test using declarations that introduce multiple shadow
diff --git a/tools/clang/rewrite_to_chrome_style/tests/methods-expected.cc b/tools/clang/rewrite_to_chrome_style/tests/methods-expected.cc index 0b07aef..569e446 100644 --- a/tools/clang/rewrite_to_chrome_style/tests/methods-expected.cc +++ b/tools/clang/rewrite_to_chrome_style/tests/methods-expected.cc
@@ -177,16 +177,24 @@ class OutOfLineBits {}; enum Foo { kBlah }; struct Bar {}; + class Baz {}; + class FooBar {}; + + template <typename T> + class MyRefPtr {}; // Naive renaming will break the build, by leaving return type the same - // as method the name - to avoid this "Get" prefix needs to be prepended + // as the method name - to avoid this "Get" prefix needs to be prepended // as suggested in https://crbug.com/582312#c17. const OutOfLineBits* GetOutOfLineBits() const { return nullptr; } Foo GetFoo() { return kBlah; } const Bar& GetBar() const { return bar_; } + MyRefPtr<Baz> GetBaz() { return MyRefPtr<Baz>(); } + const MyRefPtr<FooBar>& GetFooBar() { return foobar_; } private: Bar bar_; + MyRefPtr<FooBar> foobar_; }; } // namespace blink
diff --git a/tools/clang/rewrite_to_chrome_style/tests/methods-original.cc b/tools/clang/rewrite_to_chrome_style/tests/methods-original.cc index 734d759..bc9255b 100644 --- a/tools/clang/rewrite_to_chrome_style/tests/methods-original.cc +++ b/tools/clang/rewrite_to_chrome_style/tests/methods-original.cc
@@ -181,16 +181,24 @@ class OutOfLineBits {}; enum Foo { Blah }; struct Bar {}; + class Baz {}; + class FooBar {}; + + template <typename T> + class MyRefPtr {}; // Naive renaming will break the build, by leaving return type the same - // as method the name - to avoid this "Get" prefix needs to be prepended + // as the method name - to avoid this "Get" prefix needs to be prepended // as suggested in https://crbug.com/582312#c17. const OutOfLineBits* outOfLineBits() const { return nullptr; } Foo foo() { return Blah; } const Bar& bar() const { return m_bar; } + MyRefPtr<Baz> baz() { return MyRefPtr<Baz>(); } + const MyRefPtr<FooBar>& fooBar() { return foobar_; } private: Bar m_bar; + MyRefPtr<FooBar> foobar_; }; } // namespace blink
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py index 9787537..05f8cde 100755 --- a/tools/clang/scripts/update.py +++ b/tools/clang/scripts/update.py
@@ -27,7 +27,7 @@ # Do NOT CHANGE this if you don't know what you're doing -- see # https://chromium.googlesource.com/chromium/src/+/master/docs/updating_clang.md # Reverting problematic clang rolls is safe, though. -CLANG_REVISION = '280106' +CLANG_REVISION = '280836' use_head_revision = 'LLVM_FORCE_HEAD_REVISION' in os.environ if use_head_revision: @@ -333,7 +333,7 @@ return gnuwin_dir = os.path.join(LLVM_BUILD_TOOLS_DIR, 'gnuwin') - GNUWIN_VERSION = '4' + GNUWIN_VERSION = '5' GNUWIN_STAMP = os.path.join(gnuwin_dir, 'stamp') if ReadStampFile(GNUWIN_STAMP) == GNUWIN_VERSION: print 'GNU Win tools already up to date.' @@ -754,21 +754,20 @@ if args.with_android: make_toolchain = os.path.join( - ANDROID_NDK_DIR, 'build', 'tools', 'make-standalone-toolchain.sh') + ANDROID_NDK_DIR, 'build', 'tools', 'make_standalone_toolchain.py') for target_arch in ['aarch64', 'arm', 'i686']: # Make standalone Android toolchain for target_arch. toolchain_dir = os.path.join( LLVM_BUILD_DIR, 'android-toolchain-' + target_arch) RunCommand([ make_toolchain, - '--platform=android-' + ('21' if target_arch == 'aarch64' else '19'), - '--install-dir="%s"' % toolchain_dir, - '--system=linux-x86_64', + '--api=' + ('21' if target_arch == 'aarch64' else '19'), + '--install-dir=%s' % toolchain_dir, '--stl=stlport', - '--toolchain=' + { - 'aarch64': 'aarch64-linux-android-4.9', - 'arm': 'arm-linux-androideabi-4.9', - 'i686': 'x86-4.9', + '--arch=' + { + 'aarch64': 'arm64', + 'arm': 'arm', + 'i686': 'x86', }[target_arch]]) # Android NDK r9d copies a broken unwind.h into the toolchain, see # http://crbug.com/357890
diff --git a/tools/clang/scripts/upload_revision.py b/tools/clang/scripts/upload_revision.py index b6331df6..8a7994e 100755 --- a/tools/clang/scripts/upload_revision.py +++ b/tools/clang/scripts/upload_revision.py
@@ -21,9 +21,10 @@ UPDATE_PY_PATH = os.path.join(THIS_DIR, "update.py") CHROMIUM_DIR = os.path.abspath(os.path.join(THIS_DIR, '..', '..', '..')) +is_win = sys.platform.startswith('win32') def PatchRevision(clang_revision, clang_sub_revision): - with open(UPDATE_PY_PATH, 'r') as f: + with open(UPDATE_PY_PATH, 'rb') as f: content = f.read() m = re.search("CLANG_REVISION = '([0-9]+)'", content) clang_old_revision = m.group(1) @@ -33,13 +34,14 @@ content = re.sub("CLANG_SUB_REVISION=[0-9]+", "CLANG_SUB_REVISION={}".format(clang_sub_revision), content, count=1) - with open(UPDATE_PY_PATH, 'w') as f: + with open(UPDATE_PY_PATH, 'wb') as f: f.write(content) return clang_old_revision def Git(args): - subprocess.check_call(["git"] + args) + # Needs shell=True on Windows due to git.bat in depot_tools. + subprocess.check_call(["git"] + args, shell=is_win) def main(): parser = argparse.ArgumentParser(description='upload new clang revision') @@ -54,8 +56,9 @@ clang_revision = args.clang_revision[0] clang_sub_revision = args.clang_sub_revision + # Needs shell=True on Windows due to git.bat in depot_tools. git_revision = subprocess.check_output( - ["git", "rev-parse", "origin/master"]).strip() + ["git", "rev-parse", "origin/master"], shell=is_win).strip() print "Making a patch for Clang revision r{}-{}".format( clang_revision, clang_sub_revision) print "Chrome revision: {}".format(git_revision)
diff --git a/tools/determinism/compare_build_artifacts.py b/tools/determinism/compare_build_artifacts.py index d486cb9..982ed3b 100755 --- a/tools/determinism/compare_build_artifacts.py +++ b/tools/determinism/compare_build_artifacts.py
@@ -304,7 +304,6 @@ 'mojo_public_system_unittests.exe', 'mojo_system_unittests.exe', 'mus_clipboard_unittests.exe', - 'mus_common_unittests.exe', 'mus_demo_library.dll', 'mus_demo_unittests.exe', 'mus_gpu_unittests.exe', @@ -445,6 +444,24 @@ offset = 0 with open(first_filepath, 'rb') as lhs: with open(second_filepath, 'rb') as rhs: + # Skip part of Win32 COFF header if timestamps are different. + # + # COFF header: + # 0 - 1: magic. + # 2 - 3: # sections. + # 4 - 7: timestamp. + # .... + COFF_HEADER_TO_COMPARE_SIZE = 8 + if (sys.platform == 'win32' and first_filepath.endswith('.obj') + and file_len > COFF_HEADER_TO_COMPARE_SIZE): + rhs_data = rhs.read(COFF_HEADER_TO_COMPARE_SIZE) + lhs_data = lhs.read(COFF_HEADER_TO_COMPARE_SIZE) + if lhs_data[0:4] == rhs_data[0:4] and lhs_data[4:8] != rhs_data[4:8]: + offset += COFF_HEADER_TO_COMPARE_SIZE + else: + lhs.seek(0) + rhs.seek(0) + while True: lhs_data = lhs.read(CHUNK_SIZE) rhs_data = rhs.read(CHUNK_SIZE) @@ -559,7 +576,7 @@ second_file = os.path.join(second_dir, d) result = compare_files(first_file, second_file) if result: - print('%-*s: %s' % (max_filepath_len, d, result)) + print(' %-*s: %s' % (max_filepath_len, d, result)) def compare_build_artifacts(first_dir, second_dir, target_platform,
diff --git a/tools/gn/command_clean.cc b/tools/gn/command_clean.cc index d14b22d..f0348d94 100644 --- a/tools/gn/command_clean.cc +++ b/tools/gn/command_clean.cc
@@ -8,6 +8,7 @@ #include "base/strings/stringprintf.h" #include "tools/gn/commands.h" #include "tools/gn/err.h" +#include "tools/gn/filesystem_utils.h" #include "tools/gn/setup.h" namespace { @@ -84,8 +85,9 @@ base::FilePath build_ninja_d_file = build_dir.AppendASCII("build.ninja.d"); if (!base::PathExists(build_ninja_d_file)) { Err(Location(), - base::StringPrintf("%s does not look like a build directory.\n", - build_ninja_d_file.DirName().value().c_str())) + base::StringPrintf( + "%s does not look like a build directory.\n", + FilePathToUTF8(build_ninja_d_file.DirName().value()).c_str())) .PrintToStdout(); return 1; }
diff --git a/tools/grit/grit/format/html_inline.py b/tools/grit/grit/format/html_inline.py index 253632d..ca15413 100755 --- a/tools/grit/grit/format/html_inline.py +++ b/tools/grit/grit/format/html_inline.py
@@ -239,12 +239,18 @@ rewrite_function, filename_expansion_function=filename_expansion_function)) return "" - - return pattern % InlineToString( - filepath, grd_node, allow_external_script=allow_external_script, + # To recursively save inlined files, we need InlinedData instance returned + # by DoInline. + inlined_data_inst=DoInline(filepath, grd_node, + allow_external_script=allow_external_script, strip_whitespace=strip_whitespace, filename_expansion_function=filename_expansion_function) + inlined_files.update(inlined_data_inst.inlined_files) + + return pattern % inlined_data_inst.inlined_data; + + def InlineIncludeFiles(src_match): """Helper function to directly inline generic external files (without wrapping them with any kind of tags). @@ -286,10 +292,15 @@ # Even if names_only is set, the CSS file needs to be opened, because it # can link to images that need to be added to the file set. inlined_files.add(filepath) + + # Inline stylesheets included in this css file. + text = _INCLUDE_RE.sub(InlineIncludeFiles, + util.ReadFile(filepath, util.BINARY)) # When resolving CSS files we need to pass in the path so that relative URLs # can be resolved. - return pattern % InlineCSSText(util.ReadFile(filepath, util.BINARY), - filepath) + + return pattern % InlineCSSText(text, filepath) + def InlineCSSImages(text, filepath=input_filepath): """Helper function that inlines external images in CSS backgrounds."""
diff --git a/tools/grit/grit/format/html_inline_unittest.py b/tools/grit/grit/format/html_inline_unittest.py index ea76d37..16674cf 100755 --- a/tools/grit/grit/format/html_inline_unittest.py +++ b/tools/grit/grit/format/html_inline_unittest.py
@@ -179,6 +179,95 @@ tmp_dir.CleanUp() + def testInlineCSSWithIncludeDirective(self): + '''Tests that include directive in external css files also inlined''' + + files = { + 'index.html': ''' + <html> + <head> + <link rel="stylesheet" href="foo.css"> + </head> + </html> + ''', + + 'foo.css': '''<include src="style.css">''', + + 'style.css': ''' + <include src="style2.css"> + blink { + display: none; + } + ''', + 'style2.css': '''h1 {}''', + } + + expected_inlined = ''' + <html> + <head> + <style> + h1 {} + blink { + display: none; + } + </style> + </head> + </html> + ''' + + source_resources = set() + tmp_dir = util.TempDir(files) + for filename in files: + source_resources.add(tmp_dir.GetPath(filename)) + + result = html_inline.DoInline(tmp_dir.GetPath('index.html'), None) + resources = result.inlined_files + resources.add(tmp_dir.GetPath('index.html')) + self.failUnlessEqual(resources, source_resources) + self.failUnlessEqual(expected_inlined, + util.FixLineEnd(result.inlined_data, '\n')) + + def testCssIncludedFileNames(self): + '''Tests that all included files from css are returned''' + + files = { + 'index.html': ''' + <!DOCTYPE HTML> + <html> + <head> + <link rel="stylesheet" href="test.css"> + </head> + <body> + </body> + </html> + ''', + + 'test.css': ''' + <include src="test2.css"> + ''', + + 'test2.css': ''' + <include src="test3.css"> + .image { + background: url('test.png'); + } + ''', + + 'test3.css': '''h1 {}''', + + 'test.png': 'PNG DATA' + } + + source_resources = set() + tmp_dir = util.TempDir(files) + for filename in files: + source_resources.add(tmp_dir.GetPath(filename)) + + resources = html_inline.GetResourceFilenames(tmp_dir.GetPath('index.html')) + resources.add(tmp_dir.GetPath('index.html')) + self.failUnlessEqual(resources, source_resources) + tmp_dir.CleanUp() + def testInlineCSSLinks(self): '''Tests that only CSS files referenced via relative URLs are inlined.'''
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index 5c07baa..9dd7023 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -30,15 +30,18 @@ 'android_cronet_gn_debug_static_bot_arm64', 'Android Cronet ARMv6 Builder': 'android_cronet_gn_release_bot_minimal_symbols_armv6', - 'Android Cronet Builder (dbg)': 'android_cronet_gn_debug_static_bot', + 'Android Cronet Builder': + 'android_cronet_gn_release_bot_minimal_symbols_arm_no_neon', + 'Android Cronet Builder (dbg)': + 'android_cronet_gn_debug_static_bot_arm_no_neon', 'Android Cronet Builder Asan': - 'android_cronet_gn_release_bot_minimal_symbols_clang_asan', + 'android_cronet_gn_release_bot_minimal_symbols_arm_no_neon_clang_asan', 'Android Cronet Data Reduction Proxy Builder': - 'android_cronet_data_reduction_proxy_gn_release_bot_minimal_symbols', + 'android_cronet_data_reduction_proxy_gn_release_bot_minimal_symbols_arm_no_neon', 'Android Cronet KitKat Builder': - 'android_cronet_gn_release_bot_minimal_symbols', + 'android_cronet_gn_release_bot_minimal_symbols_arm_no_neon', 'Android Cronet Lollipop Builder': - 'android_cronet_gn_release_bot_minimal_symbols', + 'android_cronet_gn_release_bot_minimal_symbols_arm_no_neon', 'Android Cronet Marshmallow 64bit Builder': 'android_cronet_gn_release_bot_minimal_symbols_arm64', 'Android Cronet Marshmallow 64bit Perf': @@ -327,6 +330,8 @@ 'Mac 10.10 Retina Debug (AMD)': 'none', 'Mac 10.10 Retina Release (AMD)': 'none', 'Mac 10.11 Retina Release (AMD)': 'none', + 'Mac GPU ASAN Release': + 'swarming_gpu_fyi_tests_gn_release_trybot_asan', 'Mac Retina Debug': 'none', 'Mac Retina Release': 'none', 'Win7 Debug (ATI)': 'none', @@ -791,9 +796,10 @@ 'android_compile_x64_dbg': 'android_gn_debug_trybot_x64', 'android_compile_x86_dbg': 'android_gn_debug_trybot_x86', 'android_coverage': 'android_gn_debug_trybot_java_coverage', + 'android_cronet': 'android_cronet_gn_release_trybot_arm_no_neon', # TODO(crbug/597596): Switch this back to debug_trybot when cronet's # shared library loading is fixed. - 'android_cronet_tester': 'android_cronet_gn_debug_static_bot', + 'android_cronet_tester': 'android_cronet_gn_debug_static_bot_arm_no_neon', 'android_n5x_swarming_rel': 'swarming_android_gn_release_trybot_arm64', 'android_optional_gpu_tests_rel': 'swarming_android_gn_release_trybot_arm64', @@ -1056,12 +1062,12 @@ 'shared', 'debug', 'minimal_symbols', ], - 'android_cronet_data_reduction_proxy_gn_release_bot_minimal_symbols': [ + 'android_cronet_data_reduction_proxy_gn_release_bot_minimal_symbols_arm_no_neon': [ 'android', 'cronet', 'data_reduction_proxy', 'gn', 'release_bot_minimal_symbols', 'arm_no_neon' ], - 'android_cronet_gn_debug_static_bot': [ + 'android_cronet_gn_debug_static_bot_arm_no_neon': [ 'android', 'cronet', 'gn', 'debug_static_bot', 'arm_no_neon' ], @@ -1073,7 +1079,7 @@ 'android', 'cronet', 'gn', 'debug_static_bot', 'x86' ], - 'android_cronet_gn_release_bot_minimal_symbols': [ + 'android_cronet_gn_release_bot_minimal_symbols_arm_no_neon': [ 'android', 'cronet', 'gn', 'release_bot_minimal_symbols', 'arm_no_neon' ], @@ -1085,7 +1091,7 @@ 'android', 'cronet', 'gn', 'release_bot_minimal_symbols', 'armv6' ], - 'android_cronet_gn_release_bot_minimal_symbols_clang_asan': [ + 'android_cronet_gn_release_bot_minimal_symbols_arm_no_neon_clang_asan': [ 'android', 'cronet', 'gn', 'release_bot_minimal_symbols', 'arm_no_neon', 'clang', 'asan' ], @@ -1098,6 +1104,10 @@ 'android', 'cronet', 'gn', 'release_bot_minimal_symbols', 'x86' ], + 'android_cronet_gn_release_trybot_arm_no_neon': [ + 'android', 'cronet', 'gn', 'release_trybot', 'arm_no_neon' + ], + 'android_gn_debug_bot': [ 'android', 'gn', 'debug_bot', ], @@ -1787,18 +1797,20 @@ ], 'swarming_gpu_fyi_tests_chromeos_gn_release_trybot': [ - 'swarming', 'gpu_tests', 'internal_gles2_conform_tests', 'gn', - 'release_trybot', 'angle_deqp_tests', 'chromeos', + 'swarming_gpu_fyi_tests_gn', 'release_trybot', 'chromeos', ], 'swarming_gpu_fyi_tests_gn_debug_trybot': [ - 'swarming', 'gpu_tests', 'internal_gles2_conform_tests', 'gn', - 'debug_trybot', 'angle_deqp_tests', + 'swarming_gpu_fyi_tests_gn', 'debug_trybot', ], 'swarming_gpu_fyi_tests_gn_release_trybot': [ - 'swarming', 'gpu_tests', 'internal_gles2_conform_tests', 'gn', - 'release_trybot', 'angle_deqp_tests', + 'swarming_gpu_fyi_tests_gn', 'release_trybot', + ], + + 'swarming_gpu_fyi_tests_gn_release_trybot_asan': [ + 'swarming_gpu_fyi_tests_gn', 'release_trybot', + 'asan', 'full_symbols', 'disable_nacl', ], 'swarming_gpu_fyi_tests_win_clang_debug_bot': [ @@ -1807,23 +1819,19 @@ ], 'swarming_gpu_tests_deqp_gles_gn_debug_trybot_x64': [ - 'swarming', 'gpu_tests', 'angle_deqp_tests', - 'internal_gles2_conform_tests', 'gn', 'debug_trybot', 'x64', + 'swarming_gpu_fyi_tests_gn', 'debug_trybot', 'x64', ], 'swarming_gpu_tests_deqp_gles_gn_debug_trybot_x86': [ - 'swarming', 'gpu_tests', 'angle_deqp_tests', - 'internal_gles2_conform_tests', 'gn', 'debug_trybot', 'x86', + 'swarming_gpu_fyi_tests_gn', 'debug_trybot', 'x86', ], 'swarming_gpu_tests_deqp_gles_gn_release_trybot_x64': [ - 'swarming', 'gpu_tests', 'angle_deqp_tests', - 'internal_gles2_conform_tests', 'gn', 'release_trybot', 'x64', + 'swarming_gpu_fyi_tests_gn', 'release_trybot', 'x64', ], 'swarming_gpu_tests_deqp_gles_gn_release_trybot_x86': [ - 'swarming', 'gpu_tests', 'angle_deqp_tests', - 'internal_gles2_conform_tests', 'gn', 'release_trybot', 'x86', + 'swarming_gpu_fyi_tests_gn', 'release_trybot', 'x86', ], 'swarming_gpu_tests_gn_debug_trybot': [ @@ -2416,6 +2424,11 @@ 'gyp_defines': 'test_isolation_mode=prepare', }, + 'swarming_gpu_fyi_tests_gn': { + 'mixins': ['swarming', 'gpu_tests', 'internal_gles2_conform_tests', 'gn', + 'angle_deqp_tests'], + }, + # TODO(dpranke): Remove the symbolized config after the bots are gone. 'symbolized': { 'gn_args': 'symbolized=true',
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml index 7818331..9507377 100644 --- a/tools/metrics/actions/actions.xml +++ b/tools/metrics/actions/actions.xml
@@ -12837,6 +12837,13 @@ <description>A Physical Web URL was selected.</description> </action> +<action name="PhysicalWeb.WebUI.Open"> + <owner>cco3@chromium.org</owner> + <owner>mattreynolds@chromium.org</owner> + <owner>mmocny@chromium.org</owner> + <description>The Physical Web WebUI was opened or refreshed.</description> +</action> + <action name="PlatformVerificationAccepted"> <owner>Please list the metric's owners. Add more owner tags as needed.</owner> <description>Please enter the description of this user action.</description>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index aa98ab4..aa083e8 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -13406,6 +13406,9 @@ <histogram name="Event.Latency.X11EventSource.UpdateServerTime" units="microseconds"> + <obsolete> + Deprecated 08/2016, and replaced by Linux.X11.ServerRTT. + </obsolete> <owner>thomasanderson@chromium.org</owner> <summary>Time to request a timestamp from the X server.</summary> </histogram> @@ -14586,8 +14589,29 @@ </summary> </histogram> +<histogram name="Extensions.CorruptPolicyExtensionDetected" enum="BooleanHit"> + <owner>asargent@chromium.org</owner> + <summary> + Fires when we detect corruption in an enterprise policy forced install + extension and begin the process of reinstalling it. Compare to + CorruptPolicyExtensionResolved to judge success rate. + </summary> +</histogram> + +<histogram name="Extensions.CorruptPolicyExtensionResolved" units="ms"> + <owner>asargent@chromium.org</owner> + <summary> + Fires when we've successfully resinstalled a corrupt enterprise policy + force-installed extension, with a value indicating how long it took + end-to-end to complete the reinstall (including download time). + </summary> +</histogram> + <histogram name="Extensions.CorruptPolicyExtensionWouldBeDisabled" enum="BooleanHit"> + <obsolete> + Deprecated 9/2016 by fix for Issue 447040. + </obsolete> <owner>asargent@chromium.org</owner> <summary> Fires when we detect corruption in an enterprise policy forced install @@ -15855,6 +15879,15 @@ <summary>The manifest version of each loaded extension.</summary> </histogram> +<histogram name="Extensions.Messaging.GetPortIdSyncTime" units="ms"> + <owner>rdevlin.cronin@chromium.org</owner> + <summary> + The amount of synchronous time taken for the renderer to request an + extension message port id from the browser when a new channel is first + opened by an extension. + </summary> +</histogram> + <histogram name="Extensions.NetworkDelay" units="ms"> <owner>battre@chromium.org</owner> <summary>Time that network requests were blocked due to extensions.</summary> @@ -16564,6 +16597,14 @@ </summary> </histogram> +<histogram name="Extensions.SyncGetMessageBundle" units="ms"> + <owner>rdevlin.cronin@chromium.org</owner> + <summary> + The amount of synchronous time spent retrieving an extension's message + bundle (the collection of its i18n resources) from the browser. + </summary> +</histogram> + <histogram name="Extensions.ThrottledNetworkRequestDelay" units="ms"> <owner>rdevlin.cronin@chromium.org</owner> <summary> @@ -19413,8 +19454,20 @@ <owner>dominickn@chromium.org</owner> <summary> Records how many times a particular infobar was displayed in a hidden state - due to at least one other infobar existing or because it was auto-hidden. - Only recorded on Android. + due to at least one other infobar existing. If there are no existing + infobars, but the user scrolls at the exact moment a new infobar is added, + the infobar may be hidden, but not recorded in this metric. Reliably + triggering and detecting this combination is tricky so it isn't done. Only + recorded on Android. + </summary> +</histogram> + +<histogram name="InfoBar.Shown.Hiding" enum="InfoBarIdentifier"> + <owner>dfalcantara@chromium.org</owner> + <owner>dominickn@chromium.org</owner> + <summary> + Records how many times a particular infobar was visible and hiding a new + infobar behind it. Only recorded on Android. </summary> </histogram> @@ -19423,8 +19476,10 @@ <owner>dominickn@chromium.org</owner> <summary> Records how many times a particular infobar was displayed in a visible state - due to no other infobars existing and no auto-hiding. Only recorded on - Android. + due to no other infobars existing. If there are no existing infobars, but + the user scrolls at the exact moment a new infobar is added, the infobar may + be hidden, but recorded here as visible. Reliably triggering and detecting + this combination is tricky so it isn't done. Only recorded on Android. </summary> </histogram> @@ -21253,6 +21308,14 @@ </summary> </histogram> +<histogram name="Linux.X11.ServerRTT" units="microseconds"> + <owner>thomasanderson@chromium.org</owner> + <summary> + RTT between Chrome and the X11 server. Tracked in X11EventSource by + measuring the latency to receive a property event after changing a property. + </summary> +</histogram> + <histogram name="LocalDiscovery.ClientRestartAttempts"> <owner>noamsml@chromium.org</owner> <owner>vitalybuka@chromium.org</owner> @@ -26198,6 +26261,15 @@ </summary> </histogram> +<histogram name="Navigation.DeferredDocumentLoading.StatesV1" + enum="DocumentStateForDeferredLoading"> + <owner>dgrogan@chromium.org</owner> + <summary> + Why and if cross-origin documents would be loaded in a world where we defer + loading until they are visible. + </summary> +</histogram> + <histogram name="Navigation.EngagementTime.HTTP" units="ms"> <owner>felt@chromium.org</owner> <summary> @@ -36768,6 +36840,37 @@ </summary> </histogram> +<histogram name="NewTabPage.UserClassifier.AverageHoursToOpenNTP" units="hours"> + <owner>jkrcal@chromium.org</owner> + <summary> + Android: The estimated average number of hours between two successive times + when a new tab page is opened. Recorded after each opening of a NTP (and + after updating the model used for the estimate). + </summary> +</histogram> + +<histogram name="NewTabPage.UserClassifier.AverageHoursToShowSuggestions" + units="hours"> + <owner>jkrcal@chromium.org</owner> + <summary> + Android: The estimated average number of hours between two successive times + when the list of content suggestions on a new tab page is shown (i.e. when + the user scrolls below the fold). Recorded after each time the suggestions + are shown (and after updating the model used for the estimate). + </summary> +</histogram> + +<histogram name="NewTabPage.UserClassifier.AverageHoursToUseSuggestions" + units="hours"> + <owner>jkrcal@chromium.org</owner> + <summary> + Android: The estimated average number of hours between two successive times + when the user opens a content suggestion or clicks on the "More" + button. Recorded after each time a suggestion or a More button is clicked + (and after updating the model used for the estimate). + </summary> +</histogram> + <histogram name="NewTabPage.VisibleScreenshots"> <obsolete> Deprecated 2016-02 (and not recorded for some time before that). @@ -39391,6 +39494,27 @@ </summary> </histogram> +<histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptExecution" units="ms"> + <owner>bmcquade@chromium.org</owner> + <owner>csharrison@chromium.org</owner> + <summary> + Measures the time that the HTML parser spent blocked on the execution of + scripts, for main frame documents that finished parsing. + </summary> +</histogram> + +<histogram + name="PageLoad.ParseTiming.ParseBlockedOnScriptExecutionFromDocumentWrite" + units="ms"> + <owner>bmcquade@chromium.org</owner> + <owner>csharrison@chromium.org</owner> + <summary> + Measures the time that the HTML parser spent blocked on the execution of + scripts inserted from document.write, for main frame documents that finished + parsing. + </summary> +</histogram> + <histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad" units="ms"> <owner>bmcquade@chromium.org</owner> <owner>csharrison@chromium.org</owner> @@ -43360,6 +43484,9 @@ </histogram> <histogram name="PLT.NT_Connect" units="ms"> + <obsolete> + Deprecated 09/2016. + </obsolete> <owner>bolian@chromium.org</owner> <summary> Time from connectStart to connectEnd based on Navigation Timing. @@ -43442,6 +43569,9 @@ </histogram> <histogram name="PLT.NT_DomainLookup" units="ms"> + <obsolete> + Deprecated 09/2016. + </obsolete> <owner>bolian@chromium.org</owner> <summary> Time from domainLookupStart to domainLookupEnd based on Navigation Timing. @@ -43449,6 +43579,11 @@ </histogram> <histogram name="PLT.NT_DomContentLoaded" units="ms"> + <obsolete> + Deprecated 09/2016. Use + PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToDOMContentLoadedEventFired + instead. + </obsolete> <owner>bolian@chromium.org</owner> <summary> Time from domContentLoadedEventStart to domContentLoadedEventEnd based on @@ -43457,6 +43592,9 @@ </histogram> <histogram name="PLT.NT_DomInteractive" units="ms"> + <obsolete> + Deprecated 09/2016. + </obsolete> <owner>bolian@chromium.org</owner> <summary> Time from domInteractive to domContentLoadEventStart based on Navigation @@ -43465,6 +43603,9 @@ </histogram> <histogram name="PLT.NT_DomLoading" units="ms"> + <obsolete> + Deprecated 09/2016. + </obsolete> <owner>bolian@chromium.org</owner> <summary> Time from domLoading to domInteractive based on Navigation Timing. @@ -43472,6 +43613,11 @@ </histogram> <histogram name="PLT.NT_LoadEvent" units="ms"> + <obsolete> + Deprecated 09/2016. Use + PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired + instead. + </obsolete> <owner>bolian@chromium.org</owner> <summary> Time from loadEventStart to loadEventEnd based on Navigation Timing. @@ -43607,6 +43753,11 @@ </histogram> <histogram name="PLT.PT_BeginToCommit_DataReductionProxy" units="ms"> + <obsolete> + Deprecated 9/2016. Use Use + PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToCommit + instead. + </obsolete> <owner>pmeenan@chromium.org</owner> <owner>bengr@chromium.org</owner> <owner>megjablon@chromium.org</owner> @@ -43631,6 +43782,11 @@ </histogram> <histogram name="PLT.PT_BeginToFinish_DataReductionProxy" units="ms"> + <obsolete> + Deprecated 9/2016. Use Use + PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired + instead. + </obsolete> <owner>pmeenan@chromium.org</owner> <owner>bengr@chromium.org</owner> <owner>megjablon@chromium.org</owner> @@ -43655,6 +43811,11 @@ </histogram> <histogram name="PLT.PT_BeginToFinishDoc_DataReductionProxy" units="ms"> + <obsolete> + Deprecated 09/2016. Use + PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired + instead. + </obsolete> <owner>pmeenan@chromium.org</owner> <owner>bengr@chromium.org</owner> <owner>megjablon@chromium.org</owner> @@ -43678,6 +43839,11 @@ </histogram> <histogram name="PLT.PT_CommitToFinish_DataReductionProxy" units="ms"> + <obsolete> + Deprecated 09/2016. Use + PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired + instead. + </obsolete> <owner>pmeenan@chromium.org</owner> <owner>bengr@chromium.org</owner> <owner>megjablon@chromium.org</owner> @@ -43701,6 +43867,11 @@ </histogram> <histogram name="PLT.PT_CommitToFinishDoc_DataReductionProxy" units="ms"> + <obsolete> + Deprecated 09/2016. Use + PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired + instead. + </obsolete> <owner>pmeenan@chromium.org</owner> <owner>bengr@chromium.org</owner> <owner>megjablon@chromium.org</owner> @@ -43725,6 +43896,9 @@ </histogram> <histogram name="PLT.PT_FinishDocToFinish_DataReductionProxy" units="ms"> + <obsolete> + Deprecated 09/2016. + </obsolete> <owner>bengr@chromium.org</owner> <owner>megjablon@chromium.org</owner> <summary> @@ -43772,6 +43946,11 @@ </histogram> <histogram name="PLT.PT_RequestToFinish_DataReductionProxy" units="ms"> + <obsolete> + Deprecated 09/2016. Use + PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired + instead. + </obsolete> <owner>pmeenan@chromium.org</owner> <owner>bengr@chromium.org</owner> <owner>megjablon@chromium.org</owner> @@ -43805,6 +43984,9 @@ </histogram> <histogram name="PLT.PT_RequestToStart_DataReductionProxy" units="ms"> + <obsolete> + Deprecated 09/2016. + </obsolete> <owner>bengr@chromium.org</owner> <owner>megjablon@chromium.org</owner> <summary> @@ -43824,6 +44006,9 @@ </histogram> <histogram name="PLT.PT_StartToCommit_DataReductionProxy" units="ms"> + <obsolete> + Deprecated 09/2016. + </obsolete> <owner>bengr@chromium.org</owner> <owner>megjablon@chromium.org</owner> <summary> @@ -43842,6 +44027,9 @@ </histogram> <histogram name="PLT.PT_StartToFinish_DataReductionProxy" units="ms"> + <obsolete> + Deprecated 09/2016. + </obsolete> <owner>bengr@chromium.org</owner> <owner>megjablon@chromium.org</owner> <summary> @@ -45390,6 +45578,40 @@ </summary> </histogram> +<histogram name="Prerender.NoStatePrefetchMainResourceRedirects" + units="redirects"> + <owner>droger@chromium.org</owner> + <owner>mattcary@chromium.org</owner> + <owner>pasko@chromium.org</owner> + <summary> + Length of the redirect chain for main resources loaded by NoStatePrefetch. + Recorded when the final response in the chain is received. + </summary> +</histogram> + +<histogram name="Prerender.NoStatePrefetchResponseTypes" + enum="NoStatePrefetchResponseType"> + <owner>droger@chromium.org</owner> + <owner>mattcary@chromium.org</owner> + <owner>pasko@chromium.org</owner> + <summary> + Type of responses received by NoStatePrefetch, distinguishing cacheable + resources from no-store resources, and main resources from sub-resources. + Recorded when a response is received, including on each redirect. + </summary> +</histogram> + +<histogram name="Prerender.NoStatePrefetchSubResourceRedirects" + units="redirects"> + <owner>droger@chromium.org</owner> + <owner>mattcary@chromium.org</owner> + <owner>pasko@chromium.org</owner> + <summary> + Length of the redirect chain for sub-resources loaded by NoStatePrefetch. + Recorded when the final response in the chain is received. + </summary> +</histogram> + <histogram name="Prerender.OmniboxNavigationsCouldPrerender"> <owner>pasko@chromium.org</owner> <summary> @@ -45940,6 +46162,56 @@ </summary> </histogram> +<histogram name="Previews.ContentLength" units="KB"> + <owner>ryansturm@chromium.org</owner> + <summary> + The actual data used for a page load using a preview optimization. + </summary> +</histogram> + +<histogram name="Previews.DataInflation" units="KB"> + <owner>ryansturm@chromium.org</owner> + <summary> + The estimated amount that the content was inflated for a page load using a + previews optimization. Recorded when a page load using a previews + optimization inflates the data used. + </summary> +</histogram> + +<histogram name="Previews.DataInflationPercent" units="%"> + <owner>ryansturm@chromium.org</owner> + <summary> + The estimated percent of data used that a page load would have otherwise + cost for a page load using a previews optimization. Recorded when a page + load using a previews optimization inflates the data used. + </summary> +</histogram> + +<histogram name="Previews.DataSavings" units="KB"> + <owner>ryansturm@chromium.org</owner> + <summary> + The estimated data savings for a page load using a previews optimization. + Recorded when a page load using a previews optimization reduces the data + used. + </summary> +</histogram> + +<histogram name="Previews.DataSavingsPercent" units="%"> + <owner>ryansturm@chromium.org</owner> + <summary> + The estimated percent of data savings for a page load using a previews + optimization. Recorded when a page load using a previews optimization + reduces the data used. + </summary> +</histogram> + +<histogram name="Previews.OriginalContentLength" units="KB"> + <owner>ryansturm@chromium.org</owner> + <summary> + The estimated content length of a page load using a preview optimization. + </summary> +</histogram> + <histogram name="PrinterService.PrinterServiceEvent" enum="PrinterServiceEventType"> <owner>vitalybuka@chromium.org</owner> @@ -46831,6 +47103,25 @@ </summary> </histogram> +<histogram name="ProxyOverriddenBubble.ExtensionCount" units="Extensions"> + <obsolete> + Deprecated 9/2016. Never added to histograms.xml and value is always 1. + </obsolete> + <summary> + The number of extensions overriding the proxy, triggering the proxy override + extension warning bubble. + </summary> +</histogram> + +<histogram name="ProxyOverriddenBubble.UserSelection" + units="ExtensionBubbleAction"> + <owner>rdevlin.cronin@chromium.org</owner> + <summary> + The action taken by the user when the "proxy overridden" extension + warning bubble is shown. Logged immediately after the action is taken. + </summary> +</histogram> + <histogram name="PushMessaging.BackgroundBudget"> <owner>harkness@chromium.org</owner> <summary> @@ -55081,6 +55372,16 @@ </summary> </histogram> +<histogram name="Setup.Install.SingletonAcquisitionResult" + enum="SetupSingletonAcquisitionResult"> + <owner>fdoray@chromium.org</owner> + <summary> + The result of trying to acquire a setup singleton. On Windows, a setup.exe + process must hold the setup singleton of a Chrome installation when it makes + changes to it. + </summary> +</histogram> + <histogram name="Setup.Install.StrandedChromeIsUsed" enum="BooleanUsage"> <owner>grt@chromium.org</owner> <summary> @@ -57563,6 +57864,34 @@ </summary> </histogram> +<histogram name="Stability.Internals.DataDiscardCount" units="counts"> + <owner>manzagop@chromium.org</owner> + <summary> + Number of times stability data was discarded. This is accumulated since the + last report, even across versions. This is logged during stability metric + recording for the following log sent. + </summary> +</histogram> + +<histogram name="Stability.Internals.InitialStabilityLogDeferredCount" + units="counts"> + <owner>manzagop@chromium.org</owner> + <summary> + Number of times the initial stability log upload was deferred to the next + startup. This is logged during stability metric recording for the following + log sent. + </summary> +</histogram> + +<histogram name="Stability.Internals.VersionMismatchCount" units="counts"> + <owner>manzagop@chromium.org</owner> + <summary> + Number of times the version number stored in prefs did not match the + serialized system profile version number. This is logged during stability + metric recording. + </summary> +</histogram> + <histogram name="Stability.MobileSessionShutdownType" enum="MobileSessionShutdownType"> <owner>lpromero@chromium.org</owner> @@ -61465,6 +61794,15 @@ </summary> </histogram> +<histogram name="Tabs.SadTab.Feedback.Event" enum="SadTabEvent"> + <owner>sdy@chromium.org</owner> + <summary> + Counts of events from the style of sad tab which has a feedback button as + its primary action. Currently, events include being displayed (actually + visible in a window), and the actions a user can take on the page. + </summary> +</histogram> + <histogram name="Tabs.SadTab.KillCreated" units="tabs"> <owner>jamescook@chromium.org</owner> <summary> @@ -61538,6 +61876,14 @@ </summary> </histogram> +<histogram name="Tabs.SadTab.Reload.Event" enum="SadTabEvent"> + <owner>sdy@chromium.org</owner> + <summary> + Counts of events from the style of sad tab which has a reload button as its + primary action. Compare to Tabs.SadTab.Feedback.Event. + </summary> +</histogram> + <histogram name="Tabs.SadTab.ReloadCount" units="tabs"> <owner>jamescook@chromium.org</owner> <summary> @@ -61750,6 +62096,16 @@ </summary> </histogram> +<histogram name="TaskScheduler.TaskLatency" units="ms"> + <owner>fdoray@chromium.org</owner> + <owner>gab@chromium.org</owner> + <owner>robliao@chromium.org</owner> + <summary> + Time elapsed between when a task is posted and when it starts to run. + Recorded for each task that runs inside the TaskScheduler. + </summary> +</histogram> + <histogram name="ThirdPartyModules.Modules.Signed" units="modules"> <owner>chrisha@chromium.org</owner> <summary> @@ -64229,6 +64585,11 @@ <summary>Time spent in finalizing incremental marking.</summary> </histogram> +<histogram name="V8.GCIncrementalMarkingReason" units="GarbageCollectionReason"> + <owner>ulan@chromium.org</owner> + <summary>Reason an incremental marking was started in V8.</summary> +</histogram> + <histogram name="V8.GCIncrementalMarkingStart" units="ms"> <owner>jochen@chromium.org</owner> <owner>hpayer@chromium.org</owner> @@ -64241,12 +64602,22 @@ <summary>Time spent in LowMemoryNotifications.</summary> </histogram> +<histogram name="V8.GCMarkCompactReason" units="GarbageCollectionReason"> + <owner>ulan@chromium.org</owner> + <summary>Reason a mark-compact garbage collection was started in V8.</summary> +</histogram> + <histogram name="V8.GCScavenger" units="ms"> <owner>jochen@chromium.org</owner> <owner>hpayer@chromium.org</owner> <summary>Time spent in scavenging phase of GC.</summary> </histogram> +<histogram name="V8.GCScavengeReason" units="GarbageCollectionReason"> + <owner>ulan@chromium.org</owner> + <summary>Reason a scavenge garbage collection was started in V8.</summary> +</histogram> + <histogram name="V8.Initializer.LoadV8Snapshot.Result" enum="V8InitializerLoadV8SnapshotResult"> <owner>oth@chromium.org</owner> @@ -69392,6 +69763,7 @@ <int value="14" label="Cloud provision flow was timed out"/> <int value="15" label="Cloud provision flow reporeted internal error"/> <int value="16" label="ARC instance is stopped before complete provisioning"/> + <int value="17" label="Overall sign in timeout"/> </enum> <enum name="AsyncDNSConfigParsePosix" type="int"> @@ -74622,6 +74994,11 @@ <int value="3" label="Keyboard"/> </enum> +<enum name="DocumentStateForDeferredLoading" type="int"> + <int value="0" label="Created"/> + <int value="1" label="WouldLoadBecauseVisible"/> +</enum> + <enum name="DocumentWriteGatedEvaluation" type="int"> <int value="0" label="Script too long"/> <int value="1" label="No likely external script write"/> @@ -80411,6 +80788,12 @@ <int value="1548" label="MetaRefresh"/> <int value="1549" label="MetaSetCookieWhenCSPBlocksInlineScript"/> <int value="1550" label="MetaRefreshWhenCSPBlocksInlineScript"/> + <int value="1551" label="MiddleClickAutoscrollStart"/> + <int value="1552" label="ClipCssOfFixedPositionElement"/> + <int value="1553" label="RTCPeerConnectionCreateOfferOptionsOfferToReceive"/> + <int value="1554" label="DragAndDropScrollStart"/> + <int value="1555" + label="PresentationConnectionListConnectionAvailableEventListener"/> </enum> <enum name="FetchRequestMode" type="int"> @@ -81434,6 +81817,31 @@ <int value="10" label="GammaNamed"/> </enum> +<enum name="GarbageCollectionReason" type="int"> + <int value="0" label="kUnknown"/> + <int value="1" label="kAllocationFailure"/> + <int value="2" label="kAllocationLimit"/> + <int value="3" label="kContextDisposal"/> + <int value="4" label="kCountersExtension"/> + <int value="5" label="kDebugger"/> + <int value="6" label="kDeserializer"/> + <int value="7" label="kExternalMemoryPressure"/> + <int value="8" label="kFinalizeMarkingViaStackGuard"/> + <int value="9" label="kFinalizeMarkingViaTask"/> + <int value="10" label="kFullHashtable"/> + <int value="11" label="kHeapProfiler"/> + <int value="12" label="kIdleTask"/> + <int value="13" label="kLastResort"/> + <int value="14" label="kLowMemoryNotification"/> + <int value="15" label="kMakeHeapIterable"/> + <int value="16" label="kMemoryPressure"/> + <int value="17" label="kMemoryReducer"/> + <int value="18" label="kRuntime"/> + <int value="19" label="kSamplingProfiler"/> + <int value="20" label="kSnapshotCreator"/> + <int value="21" label="kTesting"/> +</enum> + <enum name="GATTCharacteristicHash" type="int"> <!-- Hash values can be produced using tool: bluetooth_metrics_hash (Only built via GN, not GYP) --> @@ -82349,7 +82757,7 @@ <int value="7" label="SERVICE_UNAVAILABLE"/> <int value="8" label="TWO_FACTOR"/> <int value="9" label="REQUEST_CANCELED"/> - <int value="10" label="HOSTED_NOT_ALLOWED"/> + <int value="10" label="HOSTED_NOT_ALLOWED (deprecated)"/> <int value="11" label="UNEXPECTED_SERVICE_RESPONSE"/> <int value="12" label="SERVICE_ERROR"/> <int value="13" label="WEB_LOGIN_REQUIRED"/> @@ -83747,6 +84155,7 @@ <int value="57" label="UNPACKING_FAILED"/> <int value="58" label="IN_USE_DOWNGRADE"/> <int value="59" label="OLD_VERSION_DOWNGRADE"/> + <int value="60" label="SETUP_SINGLETON_ACQUISITION_FAILED"/> </enum> <enum name="InstantControllerEvent" type="int"> @@ -84624,6 +85033,7 @@ <int value="40" label="SBOX_ERROR_CANNOT_SETUP_INTERCEPTION_THUNK"/> <int value="41" label="SBOX_ERROR_CANNOT_RESOLVE_INTERCEPTION_THUNK"/> <int value="42" label="SBOX_ERROR_CANNOT_WRITE_INTERCEPTION_THUNK"/> + <int value="43" label="SBOX_ERROR_CANNOT_FIND_BASE_ADDRESS"/> <int value="1002" label="LAUNCH_RESULT_SUCCESS"/> <int value="1003" label="LAUNCH_RESULT_FAILURE"/> </enum> @@ -85192,6 +85602,7 @@ <int value="-1107762575" label="enable-data-reduction-proxy-config-client"/> <int value="-1102212525" label="enable-tcp-fastopen"/> <int value="-1084055006" label="disable-web-notification-custom-layouts"/> + <int value="-1082302549" label="scan-cards-in-web-payments"/> <int value="-1078093206" label="ash-debug-shortcuts"/> <int value="-1077752943" label="enable-password-generation"/> <int value="-1075156797" label="enable-brotli"/> @@ -85569,6 +85980,7 @@ <int value="1421620678" label="simple-clear-browsing-data-support-string"/> <int value="1442798825" label="enable-quic"/> <int value="1454363479" label="disable-storage-manager"/> + <int value="1458583431" label="arc-use-auth-endpoint"/> <int value="1459529277" label="disable-text-input-focus-manager"/> <int value="1465624446" label="disable-zero-copy"/> <int value="1466380480" label="enable-device-discovery-notifications"/> @@ -88195,6 +88607,7 @@ <int value="6" label="Opened a foreign session (from other devices section)"/> <int value="7" label="Navigated to the webpage for a snippet"/> <int value="8" label="Clicked on an interest item"/> + <int value="9" label="Clicked on Learn More"/> </enum> <enum name="NewTabPageBookmarkActionAndroid" type="int"> @@ -88265,6 +88678,17 @@ <int value="1" label="Timed out"/> </enum> +<enum name="NoStatePrefetchResponseType" type="int"> + <int value="0" label="Sub-resource, cacheable"/> + <int value="1" label="Sub-resource, no-store"/> + <int value="2" label="Sub-resource redirect, cacheable"/> + <int value="3" label="Sub-resource redirect, no-store"/> + <int value="4" label="Main resource, cacheable"/> + <int value="5" label="Main resource, no-store"/> + <int value="6" label="Main resource redirect, cacheable"/> + <int value="7" label="Main resource redirect, no-store"/> +</enum> + <enum name="NotificationActionType" type="int"> <int value="0" label="Unknown"/> <int value="1" label="Notification added"/> @@ -92453,6 +92877,12 @@ <int value="1" label="Tabbed Mode"/> </enum> +<enum name="SadTabEvent" type="int"> + <int value="0" label="Displayed"/> + <int value="1" label="Button clicked"/> + <int value="2" label="Learn more clicked"/> +</enum> + <enum name="SadTabKind" type="int"> <int value="0" label="Crash (Aw, Snap!)"/> <int value="1" label="Kill (He's dead, Jim!)"/> @@ -93877,6 +94307,12 @@ label="Unpacking the (possibly patched) uncompressed archive failed."/> </enum> +<enum name="SetupSingletonAcquisitionResult" type="int"> + <int value="0" label="The setup singleton was acquired successfully."/> + <int value="1" label="Acquisition of the exit event mutex timed out."/> + <int value="2" label="Acquisition of the setup mutex timed out."/> +</enum> + <enum name="SHA1Status" type="int"> <summary> Whether or not SHA-1 was present in a certificate chain and, if it was, when @@ -99387,6 +99823,9 @@ </histogram_suffixes> <histogram_suffixes name="DataReductionProxy"> + <obsolete> + Deprecated 9/2016. + </obsolete> <suffix name="DataReductionProxy" label="Only page loads through the data reduction proxy are considered."/> <suffix name="HTTPS_DataReductionProxy" @@ -99478,6 +99917,9 @@ </histogram_suffixes> <histogram_suffixes name="DataReductionProxy_AutoLoFi" separator="_"> + <obsolete> + Deprecated 09/2016. + </obsolete> <suffix name="DataReductionProxy_AutoLoFiOn" label="Only page loads through the data reduction proxy with auto LoFi enabled are considered."/> @@ -99694,7 +100136,7 @@ <suffix name="MediumTriggeringRequest" label="Triggering request medium bypass"/> <suffix name="LongAll" label="Long bypass"/> - <suffix name="LongTriggering_Request" label="Triggering request long bypass"/> + <suffix name="LongTriggeringRequest" label="Triggering request long bypass"/> <suffix name="MissingViaHeader4xx" label="Bypass due to a 4xx missing via header"/> <suffix name="MissingViaHeaderOther" @@ -99764,6 +100206,17 @@ name="DataReductionProxy.RequestCompletionErrorCodes.MainFrame"/> </histogram_suffixes> +<histogram_suffixes name="DataSaverEnabled" separator="."> + <suffix name="DataSaverEnabled" label="Data Saver is enabled"/> + <suffix name="DataSaverDisabled" label="Data Saver is disabled"/> + <affected-histogram name="Previews.ContentLength"/> + <affected-histogram name="Previews.DataInflation"/> + <affected-histogram name="Previews.DataInflationPercent"/> + <affected-histogram name="Previews.DataSavings"/> + <affected-histogram name="Previews.DataSavingsPercent"/> + <affected-histogram name="Previews.OriginalContentLength"/> +</histogram_suffixes> + <histogram_suffixes name="DataUsageReportSubmissionBytes" separator="."> <suffix name="Failed" label="Platform external data use observer reported the submission as @@ -100314,6 +100767,13 @@ <affected-histogram name="Extensions.Functions.SucceededTime"/> </histogram_suffixes> +<histogram_suffixes name="ExtensionMessagingPortType" separator="."> + <suffix name="Extension" label="A port opened to an extension context."/> + <suffix name="NativeApp" label="A port opened to a native application."/> + <suffix name="Tab" label="A port opened to a tab context."/> + <affected-histogram name="Extensions.Messaging.GetPortIdSyncTime"/> +</histogram_suffixes> + <histogram_suffixes name="ExtensionsDatabaseOpen" separator="."> <suffix name="Rules" label="Rules backing stores"/> <suffix name="Settings" label="Settings backing stores"/> @@ -101283,8 +101743,7 @@ <affected-histogram name="Navigation.TimeToURLJobStart"/> </histogram_suffixes> -<histogram_suffixes name="Net.BidirectionalStreamExperiment" separator="." - ordering="prefix"> +<histogram_suffixes name="Net.BidirectionalStreamExperiment" separator="."> <owner>xunjieli@chromium.org</owner> <suffix name="QUIC" label="Bidirectional streams that use QUIC protocol"/> <suffix name="HTTP2" label="Bidirectional stream that use HTTP2 protocol"/> @@ -103690,6 +104149,9 @@ <affected-histogram name="Prerender.LocalPredictorTimeUntilUsed"/> <affected-histogram name="Prerender.NetworkBytesUsed"/> <affected-histogram name="Prerender.NetworkBytesWasted"/> + <affected-histogram name="Prerender.NoStatePrefetchMainResourceRedirects"/> + <affected-histogram name="Prerender.NoStatePrefetchResponseTypes"/> + <affected-histogram name="Prerender.NoStatePrefetchSubResourceRedirects"/> <affected-histogram name="Prerender.PageVisitedStatus"/> <affected-histogram name="Prerender.PerceivedPLT"/> <affected-histogram name="Prerender.PerceivedPLTFirstAfterMiss"/> @@ -104238,7 +104700,11 @@ loading and again for each redirect."/> <suffix name="Safe" label="Resources that were checked and deemed safe. Logged when the URL - check is completed."/> + check is completed."> + <obsolete> + Deprecated in 9/2016. + </obsolete> + </suffix> <suffix name="Skipped" label="Resources that were not checked because they are not active-ish content types. Only used on mobile. Logged before the resource @@ -105051,14 +105517,28 @@ <affected-histogram name="Tabs.SwitchFromUserLatency"/> </histogram_suffixes> +<histogram_suffixes name="TaskSchedulerTaskPriority" separator="."> + <suffix name="BackgroundTaskPriority" + label="Applies to tasks posted with a BACKGROUND priority."/> + <suffix name="UserVisibleTaskPriority" + label="Applies to tasks posted with a USER_VISIBLE priority."/> + <suffix name="UserBlockingTaskPriority" + label="Applies to tasks posted with a USER_BLOCKING priority."/> + <affected-histogram name="TaskScheduler.TaskLatency.BackgroundFileIOPool"/> + <affected-histogram name="TaskScheduler.TaskLatency.BackgroundPool"/> + <affected-histogram name="TaskScheduler.TaskLatency.ForegroundFileIOPool"/> + <affected-histogram name="TaskScheduler.TaskLatency.ForegroundPool"/> +</histogram_suffixes> + <histogram_suffixes name="TaskSchedulerWorkerPool" separator="."> - <suffix name="BackgroundFileIO" + <suffix name="BackgroundFileIOPool" label="Applies to the BackgroundFileIO worker pool."/> - <suffix name="Background" label="Applies to the Background worker pool."/> - <suffix name="ForegroundFileIO" + <suffix name="BackgroundPool" label="Applies to the Background worker pool."/> + <suffix name="ForegroundFileIOPool" label="Applies to the ForegroundFileIO worker pool."/> - <suffix name="Foreground" label="Applies to the Foreground worker pool."/> + <suffix name="ForegroundPool" label="Applies to the Foreground worker pool."/> <affected-histogram name="TaskScheduler.DetachDuration"/> + <affected-histogram name="TaskScheduler.TaskLatency"/> </histogram_suffixes> <histogram_suffixes name="ThreadWatcher" separator=".">
diff --git a/tools/metrics/rappor/rappor.xml b/tools/metrics/rappor/rappor.xml index fdc32832e..ddb4a2b 100644 --- a/tools/metrics/rappor/rappor.xml +++ b/tools/metrics/rappor/rappor.xml
@@ -830,6 +830,15 @@ </summary> </rappor-metric> +<rappor-metric name="ContentSettings.Plugins.AddedAllowException" + type="ETLD_PLUS_ONE"> + <owner>tommycli@chromium.org</owner> + <summary> + The eTLD+1 of a URL that the user added to the ALLOW site exceptions for + the Plugins Content Setting. + </summary> +</rappor-metric> + <rappor-metric name="CustomTabs.ServiceClient.PackageName" type="UMA_RAPPOR_TYPE"> <owner>yusufo@chromium.org</owner>
diff --git a/tools/nocompile_driver.py b/tools/nocompile_driver.py index b144c900..1c48c4b 100755 --- a/tools/nocompile_driver.py +++ b/tools/nocompile_driver.py
@@ -121,7 +121,7 @@ def ExtractTestConfigs(sourcefile_path, suite_name): - """Parses the soruce file for test configurations. + """Parses the source file for test configurations. Each no-compile test in the file is separated by an ifdef macro. We scan the source file with the NCTEST_CONFIG_RE to find all ifdefs that look like
diff --git a/tools/perf/OWNERS b/tools/perf/OWNERS index cc44a561..49c2a9b 100644 --- a/tools/perf/OWNERS +++ b/tools/perf/OWNERS
@@ -13,6 +13,9 @@ # For system health & memory-infra related changes. petrcermak@chromium.org +# For page_cycler benchmarks related changes. +kouhei@chromium.org + # emeritus: # marja@chromium.org # nduca@chromium.org
diff --git a/tools/perf/benchmarks/benchmark_smoke_unittest.py b/tools/perf/benchmarks/benchmark_smoke_unittest.py index cfd8cdcf..7d17e75 100644 --- a/tools/perf/benchmarks/benchmark_smoke_unittest.py +++ b/tools/perf/benchmarks/benchmark_smoke_unittest.py
@@ -143,19 +143,10 @@ # test from the class. We should probably discover all of the tests # in a class, and then throw the ones we don't need away instead. - # TODO(aiolos): remove try after all telemetry-side changes land. - try: - decorators.IS_UPDATED_DECORATORS - except AttributeError: - enabled_benchmark_attr = '_enabled_strings' - enabled_method_attr = '_enabled_strings' - disabled_benchmark_attr = '_disabled_strings' - disabled_method_attr = '_disabled_strings' - else: - disabled_benchmark_attr = decorators.DisabledAttributeName(benchmark) - disabled_method_attr = decorators.DisabledAttributeName(method) - enabled_benchmark_attr = decorators.EnabledAttributeName(benchmark) - enabled_method_attr = decorators.EnabledAttributeName(method) + disabled_benchmark_attr = decorators.DisabledAttributeName(benchmark) + disabled_method_attr = decorators.DisabledAttributeName(method) + enabled_benchmark_attr = decorators.EnabledAttributeName(benchmark) + enabled_method_attr = decorators.EnabledAttributeName(method) MergeDecorators(method, disabled_method_attr, benchmark, disabled_benchmark_attr)
diff --git a/tools/perf/benchmarks/memory_infra.py b/tools/perf/benchmarks/memory_infra.py index ce8f3516..1e03843c 100644 --- a/tools/perf/benchmarks/memory_infra.py +++ b/tools/perf/benchmarks/memory_infra.py
@@ -62,6 +62,10 @@ return 'memory.top_10_mobile' @classmethod + def ShouldTearDownStateAfterEachStoryRun(cls): + return False + + @classmethod def ShouldDisable(cls, possible_browser): # TODO(crbug.com/586148): Benchmark should not depend on DeskClock app. return not possible_browser.platform.CanLaunchApplication( @@ -108,6 +112,10 @@ return 'memory.dual_browser_test' @classmethod + def ShouldTearDownStateAfterEachStoryRun(cls): + return False + + @classmethod def ValueCanBeAddedPredicate(cls, value, is_first_result): # TODO(crbug.com/610962): Remove this stopgap when the perf dashboard # is able to cope with the data load generated by TBMv2 metrics. @@ -130,6 +138,10 @@ return 'memory.long_running_dual_browser_test' @classmethod + def ShouldTearDownStateAfterEachStoryRun(cls): + return False + + @classmethod def ShouldTearDownStateAfterEachStorySetRun(cls): return False
diff --git a/tools/perf/benchmarks/octane.py b/tools/perf/benchmarks/octane.py index 4c7aa5e..02fb9bf4 100644 --- a/tools/perf/benchmarks/octane.py +++ b/tools/perf/benchmarks/octane.py
@@ -80,9 +80,8 @@ self._power_metric = power.PowerMetric(platform) def WillNavigateToPage(self, page, tab): - memory_stats = tab.browser.memory_stats - if ('SystemTotalPhysicalMemory' in memory_stats and - memory_stats['SystemTotalPhysicalMemory'] < 1 * _GB): + total_memory = tab.browser.platform.GetSystemTotalPhysicalMemory() + if total_memory is not None and total_memory < 1 * _GB: skipBenchmarks = '"zlib"' else: skipBenchmarks = ''
diff --git a/tools/perf/benchmarks/smoothness.py b/tools/perf/benchmarks/smoothness.py index c650764..168e862 100644 --- a/tools/perf/benchmarks/smoothness.py +++ b/tools/perf/benchmarks/smoothness.py
@@ -459,6 +459,12 @@ def ShouldDisable(cls, possible_browser): return cls.IsSvelte(possible_browser) # http://crbug.com/555089 + @classmethod + def ValueCanBeAddedPredicate(cls, value, is_first_result): + del is_first_result # unused + # These pages don't scroll so it's not necessary to measure input latency. + return value.name != 'first_gesture_scroll_update_latency' + # http://crbug.com/522619 (mac/win) @benchmark.Disabled('win', 'mac')
diff --git a/tools/perf/benchmarks/system_health.py b/tools/perf/benchmarks/system_health.py index e4f8725..75862ea 100644 --- a/tools/perf/benchmarks/system_health.py +++ b/tools/perf/benchmarks/system_health.py
@@ -151,7 +151,10 @@ markers recorded in atrace, Chrome tracing is not enabled for this benchmark. """ - page_set = page_sets.BlankPageSet + options = {'pageset_repeat': 20} + + def CreateStorySet(self, options): + return page_sets.SystemHealthStorySet(platform='mobile', case='blank') def CreateTimelineBasedMeasurementOptions(self): options = timeline_based_measurement.Options() @@ -168,3 +171,21 @@ @classmethod def Name(cls): return 'system_health.webview_startup' + + +@benchmark.Enabled('android-webview') +class WebviewMultiprocessStartupSystemHealthBenchmark( + WebviewStartupSystemHealthBenchmark): + """Webview multiprocess startup time benchmark + + Benchmark that measures how long WebView takes to start up + and load a blank page with multiprocess enabled. + """ + + def SetExtraBrowserOptions(self, options): + options.AppendExtraBrowserArgs( + ['--webview-sandboxed-renderer']) + + @classmethod + def Name(cls): + return 'system_health.webview_startup_multiprocess'
diff --git a/tools/perf/benchmarks/v8.py b/tools/perf/benchmarks/v8.py index ed4f8d8..422580c 100644 --- a/tools/perf/benchmarks/v8.py +++ b/tools/perf/benchmarks/v8.py
@@ -2,7 +2,6 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import os -import re from core import path_util from core import perf_benchmark @@ -15,7 +14,6 @@ import page_sets from telemetry import benchmark from telemetry import story -from telemetry.timeline import chrome_trace_config from telemetry.timeline import chrome_trace_category_filter from telemetry.web_perf import timeline_based_measurement @@ -23,7 +21,6 @@ def CreateV8TimelineBasedMeasurementOptions(): category_filter = chrome_trace_category_filter.ChromeTraceCategoryFilter() category_filter.AddIncludedCategory('v8') - category_filter.AddIncludedCategory('blink') category_filter.AddIncludedCategory('blink.console') category_filter.AddDisabledByDefault('disabled-by-default-v8.compile') options = timeline_based_measurement.Options(category_filter) @@ -117,9 +114,7 @@ def ShouldTearDownStateAfterEachStoryRun(cls): return True -# Disabled on reference builds as they are failing across multiple Android -# devices. see http://crbug.com/636405 -@benchmark.Disabled('reference') + class V8TodoMVC(perf_benchmark.PerfBenchmark): """Measures V8 Execution metrics on the TodoMVC examples.""" page_set = page_sets.TodoMVCPageSet @@ -199,91 +194,6 @@ possible_browser.platform.GetDeviceTypeName() == 'Nexus 5X') -class _V8MemoryAndCodeSizeBenchmark(perf_benchmark.PerfBenchmark): - """Base class for benchmarks measuring code size.""" - - _IGNORED_V8_STATS_RE = re.compile( - r'(?<!dump)(?<!process)_(std|count|min|sum|pct_\d{4}(_\d+)?)$') - - def CreateTimelineBasedMeasurementOptions(self): - category_filter = chrome_trace_category_filter.ChromeTraceCategoryFilter( - '-*, disabled-by-default-memory-infra,' - # TODO(crbug.com/616441, primiano): Remove this temporary workaround, - # which enables memory-infra V8 code stats in V8 code size benchmarks - # only (to not slow down detailed memory dumps in other benchmarks). - 'disabled-by-default-memory-infra.v8.code_stats') - options = timeline_based_measurement.Options(category_filter) - # Trigger periodic light memory dumps every 20 ms. - memory_dump_config = chrome_trace_config.MemoryDumpConfig() - memory_dump_config.AddTrigger('light', 20) - options.config.chrome_trace_config.SetMemoryDumpConfig(memory_dump_config) - options.SetTimelineBasedMetrics(['memoryMetric']) - return options - - page_set = page_sets.Top10MobileMemoryPageSet - - @classmethod - def ShouldTearDownStateAfterEachStoryRun(cls): - return True - - @classmethod - def ValueCanBeAddedPredicate(cls, value, is_first_result): - # TODO(crbug.com/610962): Remove this stopgap when the perf dashboard - # is able to cope with the data load generated by TBMv2 metrics. - if 'memory' not in value.name: - return True # Keep all non-memory values. - # TODO(petrcermak): Remove the 'subsystem' disjunct once - # https://codereview.chromium.org/2018503002/ lands in Catapult and rolls - # into Chromium. - if (('subsystem' in value.name or 'reported_by_chrome' in value.name) and - 'v8' not in value.name): - return False # Drop non-V8 values reported by Chrome. - # Keep dump counts and average+max of process counts, vmstats and v8. - return not cls._IGNORED_V8_STATS_RE.search(value.name) - - -@benchmark.Enabled('android') -class V8MobileCodeSizeIgnition(_V8MemoryAndCodeSizeBenchmark): - """Measures V8 heap and code size with ignition enabled on mobile web pages. - - http://www.chromium.org/developers/design-documents/rendering-benchmarks - """ - - def SetExtraBrowserOptions(self, options): - super(V8MobileCodeSizeIgnition, self).SetExtraBrowserOptions(options) - v8_helper.EnableIgnition(options) - - # crbug.com/639007 - @classmethod - def ShouldDisable(cls, possible_browser): - if (possible_browser.browser_type == 'reference' and - possible_browser.platform.GetDeviceTypeName() == 'Nexus 5X'): - return True - - @classmethod - def Name(cls): - return 'top_10_mobile_memory_ignition' - - -@benchmark.Enabled('android') -class V8MobileCodeSize(_V8MemoryAndCodeSizeBenchmark): - """Measures V8 heap and code size on mobile web pages. - - http://www.chromium.org/developers/design-documents/rendering-benchmarks - """ - - # crbug.com/639007 - @classmethod - def ShouldDisable(cls, possible_browser): - if (possible_browser.browser_type == 'reference' and - possible_browser.platform.GetDeviceTypeName() == 'Nexus 5X'): - return True - - @classmethod - def Name(cls): - return 'top_10_mobile_memory' - - class V8Adword(perf_benchmark.PerfBenchmark): """Measures V8 Execution metrics on the Adword page."""
diff --git a/tools/perf/chrome_telemetry_build/BUILD.gn b/tools/perf/chrome_telemetry_build/BUILD.gn index d5663bd..f344185 100644 --- a/tools/perf/chrome_telemetry_build/BUILD.gn +++ b/tools/perf/chrome_telemetry_build/BUILD.gn
@@ -19,6 +19,47 @@ "$root_out_dir/cdb/winext/uext.dll", "$root_out_dir/cdb/winxp/exts.dll", "$root_out_dir/cdb/winxp/ntsdexts.dll", + "$root_out_dir/cdb/api-ms-win-core-console-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-datetime-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-debug-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-errorhandling-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-file-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-file-l1-2-0.dll", + "$root_out_dir/cdb/api-ms-win-core-file-l2-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-handle-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-heap-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-interlocked-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-libraryloader-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-localization-l1-2-0.dll", + "$root_out_dir/cdb/api-ms-win-core-memory-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-namedpipe-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-processenvironment-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-processthreads-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-processthreads-l1-1-1.dll", + "$root_out_dir/cdb/api-ms-win-core-profile-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-rtlsupport-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-string-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-synch-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-synch-l1-2-0.dll", + "$root_out_dir/cdb/api-ms-win-core-sysinfo-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-timezone-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-core-util-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-crt-conio-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-crt-convert-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-crt-environment-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-crt-filesystem-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-crt-heap-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-crt-locale-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-crt-math-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-crt-multibyte-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-crt-private-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-crt-process-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-crt-runtime-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-crt-stdio-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-crt-string-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-crt-time-l1-1-0.dll", + "$root_out_dir/cdb/api-ms-win-crt-utility-l1-1-0.dll", + "$root_out_dir/cdb/ucrtbase.dll", ] args = [ rebase_path("$root_out_dir/cdb", root_out_dir),
diff --git a/tools/perf/measurements/webrtc.py b/tools/perf/measurements/webrtc.py index 9735e4a..90061f8 100644 --- a/tools/perf/measurements/webrtc.py +++ b/tools/perf/measurements/webrtc.py
@@ -6,7 +6,6 @@ from metrics import cpu from metrics import media -from metrics import memory from metrics import power from metrics import webrtc_stats @@ -18,7 +17,6 @@ super(WebRTC, self).__init__() self._cpu_metric = None self._media_metric = None - self._memory_metric = None self._power_metric = None self._webrtc_stats_metric = None @@ -27,19 +25,16 @@ def DidStartBrowser(self, browser): self._cpu_metric = cpu.CpuMetric(browser) - self._memory_metric = memory.MemoryMetric(browser) self._webrtc_stats_metric = webrtc_stats.WebRtcStatisticsMetric() def DidNavigateToPage(self, page, tab): self._cpu_metric.Start(page, tab) self._media_metric = media.MediaMetric(tab) self._media_metric.Start(page, tab) - self._memory_metric.Start(page, tab) self._power_metric.Start(page, tab) self._webrtc_stats_metric.Start(page, tab) def CustomizeBrowserOptions(self, options): - memory.MemoryMetric.CustomizeBrowserOptions(options) options.AppendExtraBrowserArgs('--use-fake-device-for-media-stream') options.AppendExtraBrowserArgs('--use-fake-ui-for-media-stream') power.PowerMetric.CustomizeBrowserOptions(options) @@ -55,9 +50,6 @@ self._media_metric.Stop(page, tab) self._media_metric.AddResults(tab, results, exclude_metrics=exclude_metrics) - self._memory_metric.Stop(page, tab) - self._memory_metric.AddResults(tab, results) - self._power_metric.Stop(page, tab) self._power_metric.AddResults(tab, results)
diff --git a/tools/perf/page_sets/system_health/blank_stories.py b/tools/perf/page_sets/system_health/blank_stories.py new file mode 100644 index 0000000..ffe0ecc --- /dev/null +++ b/tools/perf/page_sets/system_health/blank_stories.py
@@ -0,0 +1,25 @@ +# Copyright 2016 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. + +from page_sets.system_health import system_health_story + + +class BlankAboutBlankStory(system_health_story.SystemHealthStory): + """Story that loads the about:blank page.""" + + NAME = 'blank:about:blank' + URL = 'about:blank' + + def _DidLoadDocument(self, action_runner): + # Request a RAF and wait for it to be processed to ensure that the metric + # Startup.FirstWebContents.NonEmptyPaint2 is recorded. + action_runner.ExecuteJavaScript( + """ + window.__hasRunRAF = false; + requestAnimationFrame(function() { + window.__hasRunRAF = true; + }); + """ + ) + action_runner.WaitForJavaScriptCondition("window.__hasRunRAF")
diff --git a/tools/perf/page_sets/system_health/browsing_stories.py b/tools/perf/page_sets/system_health/browsing_stories.py index e6441585..4107149 100644 --- a/tools/perf/page_sets/system_health/browsing_stories.py +++ b/tools/perf/page_sets/system_health/browsing_stories.py
@@ -5,6 +5,8 @@ from page_sets.system_health import platforms from page_sets.system_health import system_health_story +from telemetry import decorators + class _BrowsingStory(system_health_story.SystemHealthStory): """Abstract base class for browsing stories. @@ -79,15 +81,15 @@ repeat_count=self.MAIN_PAGE_SCROLL_REPEAT) +# TODO(ulan): Enable this story on mobile once it uses less memory and does not +# crash with OOM. +@decorators.Disabled('android') class CnnStory(_NewsBrowsingStory): """The second top website in http://www.alexa.com/topsites/category/News""" NAME = 'browse:news:cnn' URL = 'http://edition.cnn.com/' ITEM_SELECTOR = '.cd__content > h3 > a' ITEMS_TO_VISIT = 2 - # TODO(ulan): Enable this story on mobile once it uses less memory and - # does not crash with OOM. - SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY class FacebookMobileStory(_NewsBrowsingStory): @@ -151,14 +153,14 @@ SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY +# Desktop qq.com opens a news item in a separate tab, for which the back button +# does not work. Mobile qq.com is disabled due to crbug.com/627166. +@decorators.Disabled('all') class QqMobileStory(_NewsBrowsingStory): NAME = 'browse:news:qq' URL = 'http://news.qq.com' - # Desktop qq.com opens a news item in a separate tab, for which the back - # button does not work. - # Mobile qq.com is disabled due to crbug.com/627166 ITEM_SELECTOR = '.list .full a' - SUPPORTED_PLATFORMS = platforms.NO_PLATFORMS + SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY class RedditDesktopStory(_NewsBrowsingStory): @@ -280,7 +282,7 @@ ITEM_SELECTOR_INDEX = 3 -class FacebookPhotosMediaStory(_MediaBrowsingStory): +class FacebookPhotosMobileStory(_MediaBrowsingStory): NAME = 'browse:media:facebook_photos' URL = ( 'https://m.facebook.com/rihanna/photos/a.207477806675.138795.10092511675/10153911739606676/?type=3&source=54&ref=page_internal')
diff --git a/tools/perf/page_sets/system_health/loading_stories.py b/tools/perf/page_sets/system_health/loading_stories.py index 9db0b955..eae99f9 100644 --- a/tools/perf/page_sets/system_health/loading_stories.py +++ b/tools/perf/page_sets/system_health/loading_stories.py
@@ -163,7 +163,7 @@ SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY -class LoadSohuStory(_LoadingStory): +class LoadSohuMobileStory(_LoadingStory): NAME = 'load:news:sohu' # Using "https://" leads to missing images and scripts on mobile (due to # mixed content). @@ -389,12 +389,10 @@ NAME = 'load:games:miniclip' # Using "https://" causes "404 Not Found" during WPR recording. URL = 'http://www.miniclip.com/games/en/' - # Desktop only (requires Flash). - SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY + SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY # Requires Flash. class LoadAlphabettyStory(_LoadingStory): NAME = 'load:games:alphabetty' URL = 'https://king.com/play/alphabetty' - # Desktop only (requires Flash). - SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY + SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY # Requires Flash.
diff --git a/tools/perf/page_sets/system_health/platforms.py b/tools/perf/page_sets/system_health/platforms.py index cc6bb5b3..a54fc41 100644 --- a/tools/perf/page_sets/system_health/platforms.py +++ b/tools/perf/page_sets/system_health/platforms.py
@@ -6,7 +6,10 @@ MOBILE = 'mobile' ALL_PLATFORMS = frozenset({DESKTOP, MOBILE}) + +# Use the constants below to mark on which platforms the story has WPR +# recordings. To disable a story (e.g. because it crashes or takes too long), +# use @decorators.Disabled instead. DESKTOP_ONLY = frozenset({DESKTOP}) MOBILE_ONLY = frozenset({MOBILE}) -# This is used for disabling a story on all platforms. NO_PLATFORMS = frozenset()
diff --git a/tools/perf/page_sets/system_health/searching_stories.py b/tools/perf/page_sets/system_health/searching_stories.py index 96dd713..19c64a6 100644 --- a/tools/perf/page_sets/system_health/searching_stories.py +++ b/tools/perf/page_sets/system_health/searching_stories.py
@@ -2,15 +2,15 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -from page_sets.system_health import platforms from page_sets.system_health import system_health_story +from telemetry import decorators + +@decorators.Disabled('win') # http://crbug.com/642463 class SearchGoogleStory(system_health_story.SystemHealthStory): NAME = 'search:portal:google' URL = 'https://www.google.co.uk/' - # Tap simulation doesn't fully work on Windows. http://crbug.com/634343 - SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY _SEARCH_BOX_SELECTOR = 'input[aria-label="Search"]' _RESULT_SELECTOR = '.r > a[href*="wikipedia"]'
diff --git a/tools/perf/page_sets/system_health/system_health_story.py b/tools/perf/page_sets/system_health/system_health_story.py index 394710d..78b9347b 100644 --- a/tools/perf/page_sets/system_health/system_health_story.py +++ b/tools/perf/page_sets/system_health/system_health_story.py
@@ -4,7 +4,9 @@ from page_sets.system_health import platforms +from telemetry import decorators from telemetry.page import page +from telemetry.page import shared_page_state # Extra wait time after the page has loaded required by the loading metric. We @@ -13,6 +15,32 @@ _WAIT_TIME_AFTER_LOAD = 10 +class _SystemHealthSharedState(shared_page_state.SharedPageState): + """Shared state which enables disabling stories on individual platforms. + + This class adds support for enabling/disabling individual stories on + individual platforms using the same approaches as for benchmarks: + + 1. Disabled/Enabled decorator: + + @decorators.Disabled('win') + class Story(system_health_story.SystemHealthStory): + ... + + 2. ShouldDisable method: + + class Story(system_health_story.SystemHealthStory): + ... + + @classmethod + def ShouldDisable(cls, possible_browser): + return possible_browser.platform.GetOSName() == 'win' + """ + + def CanRunStory(self, story): + return story.CanRun(self.possible_browser) + + class _MetaSystemHealthStory(type): """Metaclass for SystemHealthStory.""" @@ -41,11 +69,28 @@ def __init__(self, story_set, take_memory_measurement): case, group, _ = self.NAME.split(':') super(SystemHealthStory, self).__init__( - page_set=story_set, name=self.NAME, url=self.URL, + shared_page_state_class=_SystemHealthSharedState, page_set=story_set, + name=self.NAME, url=self.URL, credentials_path='../data/credentials.json', grouping_keys={'case': case, 'group': group}) self._take_memory_measurement = take_memory_measurement + @classmethod + def CanRun(cls, possible_browser): + if (decorators.ShouldSkip(cls, possible_browser)[0] or + cls.ShouldDisable(possible_browser)): + return False + return True + + @classmethod + def ShouldDisable(cls, possible_browser): + """Override this method to disable a story under specific conditions. + + This method is modelled after telemetry.benchmark.Benchmark.ShouldDisable(). + """ + del possible_browser + return False + def _Measure(self, action_runner): if self._take_memory_measurement: action_runner.MeasureMemory(deterministic_mode=True)
diff --git a/tools/perf/page_sets/todomvc.py b/tools/perf/page_sets/todomvc.py index 115b1a9c..4f095ec 100644 --- a/tools/perf/page_sets/todomvc.py +++ b/tools/perf/page_sets/todomvc.py
@@ -39,13 +39,10 @@ """ this.becameIdle = false; this.idleCallback = function(deadline) { - let idletime = deadline.timeRemaining(); - console.time("time remaining: " + idletime); - if (idletime > 20) + if (deadline.timeRemaining() > 20) this.becameIdle = true; else requestIdleCallback(this.idleCallback); - console.timeEnd("time remaining: " + idletime); }; requestIdleCallback(this.idleCallback); """
diff --git a/tools/protoc_wrapper/protoc_wrapper.py b/tools/protoc_wrapper/protoc_wrapper.py index 26f3e3d..8eac884 100755 --- a/tools/protoc_wrapper/protoc_wrapper.py +++ b/tools/protoc_wrapper/protoc_wrapper.py
@@ -96,15 +96,15 @@ options = parser.parse_args() proto_dir = os.path.relpath(options.proto_in_dir) - protoc_cmd = [ - os.path.realpath(options.protoc), - "--proto_path", proto_dir - ] + protoc_cmd = [os.path.realpath(options.protoc)] protos = options.protos headers = [] VerifyProtoNames(protos) + if options.py_out_dir: + protoc_cmd += ["--python_out", options.py_out_dir] + if options.cc_out_dir: cc_out_dir = options.cc_out_dir cc_options = FormatGeneratorOptions(options.cc_options) @@ -113,9 +113,6 @@ stripped_name = StripProtoExtension(filename) headers.append(os.path.join(cc_out_dir, stripped_name + ".pb.h")) - if options.py_out_dir: - protoc_cmd += ["--python_out", options.py_out_dir] - if options.plugin_out_dir: plugin_options = FormatGeneratorOptions(options.plugin_options) protoc_cmd += [ @@ -123,6 +120,7 @@ "--plugin_out", plugin_options + options.plugin_out_dir ] + protoc_cmd += ["--proto_path", proto_dir] protoc_cmd += [os.path.join(proto_dir, name) for name in protos] ret = subprocess.call(protoc_cmd) if ret != 0:
diff --git a/tools/valgrind/gtest_exclude/content_unittests.gtest-drmemory_win32.txt b/tools/valgrind/gtest_exclude/content_unittests.gtest-drmemory_win32.txt index 8cd7bb7..52ca2d14 100644 --- a/tools/valgrind/gtest_exclude/content_unittests.gtest-drmemory_win32.txt +++ b/tools/valgrind/gtest_exclude/content_unittests.gtest-drmemory_win32.txt
@@ -7,6 +7,3 @@ # http://crbug.com/522049 RenderWidgetCompositorOutputSurfaceTest.SucceedTwice RenderWidgetCompositorOutputSurfaceTest.FallbackSuccessNormalSuccess - -# https://crbug.com/604056 -CodecProfiles/RTCVideoDecoderTest.GetVDAErrorCounterForTesting*
diff --git a/tools/vim/chromium.ycm_extra_conf.py b/tools/vim/chromium.ycm_extra_conf.py index e9397ce..a2f74a2 100644 --- a/tools/vim/chromium.ycm_extra_conf.py +++ b/tools/vim/chromium.ycm_extra_conf.py
@@ -63,6 +63,10 @@ 'c++', ] +_extension_flags = { + '.m': ['-x', 'objective-c'], + '.mm': ['-x', 'objective-c++'], +} def PathExists(*args): return os.path.exists(os.path.join(*args)) @@ -80,7 +84,7 @@ (String) Path of 'src/', or None if unable to find. """ curdir = os.path.normpath(os.path.dirname(filename)) - while not (os.path.basename(os.path.realpath(curdir)) == 'src' + while not (os.path.basename(curdir) == 'src' and PathExists(curdir, 'DEPS') and (PathExists(curdir, '..', '.gclient') or PathExists(curdir, '.git'))): @@ -159,7 +163,7 @@ """ # Ninja needs the path to the source file relative to the output build # directory. - rel_filename = os.path.relpath(os.path.realpath(filename), out_dir) + rel_filename = os.path.relpath(filename, out_dir) p = subprocess.Popen(['ninja', '-C', out_dir, '-t', 'query', rel_filename], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, @@ -320,7 +324,7 @@ sys.path.append(os.path.join(chrome_root, 'tools', 'vim')) from ninja_output import GetNinjaOutputDirectory - out_dir = os.path.realpath(GetNinjaOutputDirectory(chrome_root)) + out_dir = GetNinjaOutputDirectory(chrome_root) clang_line = GetClangCommandLineFromNinjaForSource( out_dir, GetBuildableSourceFile(chrome_root, filename)) @@ -348,6 +352,7 @@ 'flags': (List of Strings) Command line flags. 'do_cache': (Boolean) True if the result should be cached. """ + ext = os.path.splitext(filename)[1] abs_filename = os.path.abspath(filename) chrome_root = FindChromeSrcFromFilename(abs_filename) clang_flags = GetClangOptionsFromNinjaForFilename(chrome_root, abs_filename) @@ -357,7 +362,7 @@ # determine the flags again. should_cache_flags_for_file = bool(clang_flags) - final_flags = _default_flags + clang_flags + final_flags = _default_flags + _extension_flags.get(ext, []) + clang_flags return { 'flags': final_flags,
diff --git a/tools/vim/ninja_output.py b/tools/vim/ninja_output.py index e6add13..af30520 100644 --- a/tools/vim/ninja_output.py +++ b/tools/vim/ninja_output.py
@@ -37,9 +37,8 @@ if not output_dirs: for f in os.listdir(chrome_root): if re.match(r'out(\b|_)', f): - out = os.path.realpath(os.path.join(chrome_root, f)) - if os.path.isdir(out): - output_dirs.append(os.path.relpath(out, start = chrome_root)) + if os.path.isdir(os.path.join(chrome_root, f)): + output_dirs.append(f) def generate_paths(): for out_dir in output_dirs:
diff --git a/tools/vim/tests/chromium.ycm_extra_conf_unittest.py b/tools/vim/tests/chromium.ycm_extra_conf_unittest.py index bb3dca4..63aa5e1 100755 --- a/tools/vim/tests/chromium.ycm_extra_conf_unittest.py +++ b/tools/vim/tests/chromium.ycm_extra_conf_unittest.py
@@ -53,6 +53,13 @@ statinfo = os.stat(path) os.chmod(path, statinfo.st_mode | stat.S_IXUSR) +def GetLastLangFlag(flags): + lastLang = None + for i, flag in enumerate(flags): + if flag =='-x': + lastLang = flags[i+1] + return lastLang + class Chromium_ycmExtraConfTest(unittest.TestCase): def SetUpFakeChromeTreeBelowPath(self): @@ -225,6 +232,18 @@ '-I[OUT]/tag-default' ]) + def testGetFlagsForFileForUnknownObjcFile(self): + result = self.ycm_extra_conf.FlagsForFile( + os.path.join(self.chrome_root, 'nonexistent.m')) + self.assertTrue(result) + self.assertEqual(GetLastLangFlag(result['flags']), 'objective-c') + + def testGetFlagsForFileForUnknownObjcppFile(self): + result = self.ycm_extra_conf.FlagsForFile( + os.path.join(self.chrome_root, 'nonexistent.mm')) + self.assertTrue(result) + self.assertEqual(GetLastLangFlag(result['flags']), 'objective-c++') + def testGetFlagsForFileForUnknownHeaderFile(self): result = self.ycm_extra_conf.FlagsForFile( os.path.join(self.chrome_root, 'nonexistent.h'))