New issue
Advanced search Search tips

Issue 728324 link

Starred by 3 users

Issue metadata

Status: Fixed
Owner:
Closed: Dec 2017
Cc:
EstimatedDays: ----
NextAction: ----
OS: Windows
Pri: 2
Type: Bug

Blocking:
issue 82385



Sign in to add a comment

NewTabPage.LoadTime UMA metric is slower with win-clang than win-pgo

Project Member Reported by h...@chromium.org, May 31 2017

Issue description

UMA data from the dev channel experiments show NewTabPage.LoadTime being higher with win-clang than win-pgo.

The metric measure time from navigation start to when the NTP tiles are finished loading, which means it includes the time for render start-up.

The current theory is that it's not so much the NTP itself that's slower with Clang, but start-up of the first render process.
 

Comment 1 by r...@chromium.org, May 31 2017

Cc: r...@chromium.org

Comment 3 by h...@chromium.org, Jun 9 2017

Got a patch out for using order files: https://chromium-review.googlesource.com/c/529684/

The order files were generated with the "cygprofile" -finstrument-functions flag with the horrible patch here: https://codereview.chromium.org/2924093003

Comment 4 by h...@chromium.org, Jun 9 2017

I ran the startup.cold.blank_page telemetry benchmark locally on 32-bit builds with and without order file.

These numbers probably don't mean much, but the order file build (left) seems a little faster on some benchmarks, and on the ones where it's slower, that seems to be due to an outlier moving the average.
results.pdf
120 KB Download
Project Member

Comment 5 by bugdroid1@chromium.org, Jun 12 2017

Comment 6 by h...@chromium.org, Jun 20 2017

Status: Started (was: Assigned)
New order files landed last night: https://codereview.chromium.org/2943423002
Not sure why it didn't update the bug.

Comment 7 by h...@chromium.org, Jun 20 2017

Using the same instrumentation as for the order files (https://codereview.chromium.org/2924093003) we can get a list of functions called during start-up sorted by frequency (attached). (The list is not perfect becuase the instrumentation will affect inlining decisions, but it should still be a good guide.)

By adding printfs to LLVM we can see all the inlining decisions, in particular the ones done during an LTO build, i.e. functions that are not available for inlining during regular builds (attached).

diff --git a/lib/Transforms/Utils/InlineFunction.cpp b/lib/Transforms/Utils/InlineFunction.cpp
index 2a18c14..50bc610 100644
--- a/lib/Transforms/Utils/InlineFunction.cpp
+++ b/lib/Transforms/Utils/InlineFunction.cpp
@@ -2109,6 +2109,15 @@ bool llvm::InlineFunction(CallSite CS, InlineFunctionInfo &IFI,
       else
         TheCall->replaceAllUsesWith(R->getReturnValue());
     }
+
+    StringRef CallerName = TheCall->getParent()->getParent()->getName();
+    if (CallerName.front() == 1) CallerName = CallerName.drop_front();
+
+    StringRef CalleeName = CalledFunc->getName();
+    if (CalleeName.front() == 1) CalleeName = CalleeName.drop_front();
+
+    llvm::errs() << "INLINE CALLER " << CallerName << " CALLEE " << CalleeName << "\n";
+
     // Since we are now done with the Call/Invoke, we can delete it.
     TheCall->eraseFromParent();


Taking the intersection of those two, we get a list of functions hit during start-up that would be inlined at least once in an LTO build. Below are the first 100 lines from that file. The idea is that it might be beneficial to define some of these inline to enable inlining in builds that don't yet use LTO.


?GetUnexpectedTokenMessage@?$ParserBase@VParser@internal@v8@@@internal@v8@@IEAAXW4Value@Token@23@PEAW4Template@MessageTemplate@23@PEAULocation@Scanner@23@PEAPEBDW46723@@Z 431344 LTO
free 277882 LTO
?ScanTemplateContinuation@Scanner@internal@v8@@QEAA?AW4Value@Token@23@XZ 205153 LTO
??0VariableProxy@internal@v8@@AEAA@PEBVAstRawString@12@W4VariableKind@12@H@Z 151841 LTO
?ZapRange@HandleScope@internal@v8@@CAXPEAPEAVObject@23@0@Z 147654 LTO
?NewUnresolved@Scope@internal@v8@@QEAAPEAVVariableProxy@23@PEAVAstNodeFactory@23@PEBVAstRawString@23@HW4VariableKind@23@@Z 140454 LTO
?Unlock@LockImpl@internal@base@@QEAAXXZ 123089 LTO
?Release@RefCountedThreadSafeBase@subtle@base@@IEBA_NXZ 99526 LTO
?AddRef@RefCountedThreadSafeBase@subtle@base@@IEBAXXZ 97363 LTO
?Lock@LockImpl@internal@base@@QEAAXXZ 89006 LTO
??0ScopedLockAcquireActivity@debug@base@@AEAA@PEBXPEBVLockImpl@internal@2@@Z 86375 LTO
?ScavengeObjectSlow@Scavenger@internal@v8@@SAXPEAPEAVHeapObject@23@PEAV423@@Z 80931 LTO
?GetKind@FeedbackVector@internal@v8@@QEBA?AW4FeedbackSlotKind@23@VFeedbackSlot@23@@Z 77635 LTO
?GetTLSValue@PlatformThreadLocalStorage@internal@base@@SAPEAXK@Z 76780 LTO
?SaturatedAdd@time_internal@base@@YA_JVTimeDelta@2@_J@Z 66284 LTO
??0?$CallbackBase@$00@internal@base@@QEAA@$$QEAV012@@Z 60376 LTO
?set_range@BucketRanges@base@@QEAAX_KH@Z 59638 LTO
??0Variable@internal@v8@@QEAA@PEAVScope@12@PEBVAstRawString@12@W4VariableMode@12@W4VariableKind@12@W4InitializationFlag@12@W4MaybeAssignedFlag@12@@Z 57994 LTO
?GetUnexpectedTokenMessage@?$ParserBase@VPreParser@internal@v8@@@internal@v8@@IEAAXW4Value@Token@23@PEAW4Template@MessageTemplate@23@PEAULocation@Scanner@23@PEAPEBDW46723@@Z 52622 LTO
?CopyRaw@SnapshotByteSource@internal@v8@@QEAAXPEAEH@Z 45411 LTO
?Now@TimeTicks@base@@SA?AV12@XZ 38981 LTO
?AllocateFixedArray@Heap@internal@v8@@AEAA?AVAllocationResult@23@HW4PretenureFlag@23@@Z 37636 LTO
??0CSSParserToken@blink@@QEAA@W4CSSParserTokenType@1@W4BlockType@01@@Z 35721 LTO
?GetVisitorId@StaticVisitorBase@internal@v8@@SA?AW4VisitorId@23@PEAVMap@23@@Z 32558 LTO
?GetVisitorId@StaticVisitorBase@internal@v8@@SA?AW4VisitorId@23@HH_N@Z 32502 LTO
?Lock@Mutex@base@v8@@QEAAXXZ 31735 LTO
?SizeOfOperand@Bytecodes@interpreter@internal@v8@@SA?AW4OperandSize@234@W4OperandType@234@W4OperandScale@234@@Z 30137 LTO
?GetAccessors@LookupIterator@internal@v8@@QEBA?AV?$Handle@VObject@internal@v8@@@23@XZ 29636 LTO
?IterateBody@HeapObject@internal@v8@@QEAAXW4InstanceType@23@HPEAVObjectVisitor@23@@Z 29391 LTO
?InterpreterEntryTrampoline@Builtins@internal@v8@@QEAA?AV?$Handle@VCode@internal@v8@@@23@XZ 29036 LTO
??0Assignment@internal@v8@@AEAA@W4Value@Token@12@PEAVExpression@12@1H@Z 28905 LTO
??0StackFrameIterator@internal@v8@@QEAA@PEAVIsolate@12@@Z 26934 LTO
??0StackFrameIteratorBase@internal@v8@@IEAA@PEAVIsolate@12@_N@Z 26904 LTO
??0CSSParserToken@blink@@QEAA@W4CSSParserTokenType@1@VStringView@WTF@@W4BlockType@01@@Z 23192 LTO
?InMilliseconds@TimeDelta@base@@QEBA_JXZ 23118 LTO
?kind@FunctionLiteral@internal@v8@@QEBA?AW4FunctionKind@23@XZ 22518 LTO
??0Location@tracked_objects@@QEAA@AEBV01@@Z 22204 LTO
?global_object@Context@internal@v8@@QEAAPEAVJSGlobalObject@23@XZ 20720 LTO
?GetElementsAccessor@JSObject@internal@v8@@QEAAPEAVElementsAccessor@23@XZ 19608 LTO
??0?$CallbackBase@$0A@@internal@base@@IEAA@PEAVBindStateBase@12@@Z 19419 LTO
?Delimiter@CSSParserToken@blink@@QEBA_WXZ 19275 LTO
?IterateBody@HeapObject@internal@v8@@QEAAXPEAVObjectVisitor@23@@Z 18727 LTO
??0SkString@@QEAA@XZ 18565 LTO
?IsInheritedProperty@CSSPropertyMetadata@blink@@SA_NW4CSSPropertyID@2@@Z 18177 LTO
?IsActive@Locker@v8@@SA_NXZ 17982 LTO
??0SkString@@QEAA@$$QEAV0@@Z 17250 LTO
??0PendingTask@base@@QEAA@$$QEAU01@@Z 16260 LTO
?scope@ParseInfo@internal@v8@@QEBAPEAVDeclarationScope@23@XZ 15901 LTO
?RootIsImmortalImmovable@Heap@internal@v8@@SA_NH@Z 15872 LTO
?Now@TrackedTime@tracked_objects@@SA?AV12@XZ 15628 LTO
?sk_free@@YAXPEAX@Z 15265 LTO
?GetStaticVisitorIdForMap@Heap@internal@v8@@SAHPEAVMap@23@@Z 15131 LTO
?GetIsolate@Context@v8@@QEAAPEAVIsolate@2@XZ 14863 LTO
?CreatingInitialEmptyDocument@FrameLoaderStateMachine@blink@@QEBA_NXZ 14750 LTO
?NumericValue@CSSParserToken@blink@@QEBANXZ 14539 LTO
??GTrackedTime@tracked_objects@@QEBA?AVDuration@1@AEBV01@@Z 14353 LTO
??0Zone@internal@v8@@QEAA@PEAVAccountingAllocator@12@PEBD@Z 14141 LTO
?FromParameterIndex@Register@interpreter@internal@v8@@SA?AV1234@HH@Z 14023 LTO
?Empty@ScopeInfo@internal@v8@@SAPEAV123@PEAVIsolate@23@@Z 13584 LTO
?ConfigurePremonomorphic@FeedbackNexus@internal@v8@@QEAAXXZ 13428 LTO
?is_current_context@Register@interpreter@internal@v8@@QEBA_NXZ 12517 LTO
?NewNoClosuresCell@Factory@internal@v8@@QEAA?AV?$Handle@VCell@internal@v8@@@23@V?$Handle@VObject@internal@v8@@@23@@Z 12407 LTO
?AssignFeedbackSlots@Assignment@internal@v8@@QEAAXPEAVFeedbackVectorSpec@23@W4LanguageMode@23@PEAVFeedbackSlotCache@23@@Z 12237 LTO
?HasOneRef@RefCountedThreadSafeBase@subtle@base@@QEBA_NXZ 11188 LTO
?CurrentId@PlatformThread@base@@SAKXZ 11184 LTO
?ExpiredCount@ConsoleMessageStorage@blink@@QEBAHXZ 10598 LTO
??0FuncNameInferrer@internal@v8@@QEAA@PEAVAstValueFactory@12@PEAVZone@12@@Z 10488 LTO
?DeclareAndInitializeVariables@PatternRewriter@Parser@internal@v8@@SAXPEAV234@PEAVBlock@34@PEBUDeclarationDescriptor@?$ParserBase@VParser@internal@v8@@@34@PEBUDeclaration@DeclarationParsingResult@734@PEAV?$ZoneList@PEBVAstRawString@internal@v8@@@34@PEA_N@Z 10377 LTO
?DataField@Descriptor@internal@v8@@SA?AV123@V?$Handle@VName@internal@v8@@@23@HW4PropertyAttributes@23@W4PropertyConstness@23@VRepresentation@23@V?$Handle@VObject@internal@v8@@@23@@Z 10236 LTO
?IncreaseSumAndCount@HistogramSamples@base@@IEAAX_JH@Z 9852 LTO
??0Operand@internal@v8@@QEAA@URegister@12@H@Z 9828 LTO
?shorthandForProperty@blink@@YAAEBVStylePropertyShorthand@1@W4CSSPropertyID@1@@Z 9444 LTO
?start_position@FunctionLiteral@internal@v8@@QEBAHXZ 9359 LTO
?Add@TemplateList@internal@v8@@SA?AV?$Handle@VTemplateList@internal@v8@@@23@PEAVIsolate@23@V423@V?$Handle@VObject@internal@v8@@@23@@Z 9003 LTO
??0CSSParserToken@blink@@QEAA@W4CSSParserTokenType@1@NW4NumericValueType@1@W4NumericSign@1@@Z 8703 LTO
?Get@CSSPropertyDescriptor@blink@@SAAEBU12@W4CSSPropertyID@2@@Z 8606 LTO
?Contains@LargeObjectSpace@internal@v8@@QEAA_NPEAVHeapObject@23@@Z 8527 LTO
?isShorthandProperty@blink@@YA_NW4CSSPropertyID@1@@Z 8446 LTO
??0CSSParserSelector@blink@@QEAA@XZ 8429 LTO
?IsCancelled@?$CallbackBase@$0A@@internal@base@@QEBA_NXZ 8247 LTO
?Parameter@BytecodeArrayBuilder@interpreter@internal@v8@@QEBA?AVRegister@234@H@Z 8236 LTO
?global_proxy@Context@internal@v8@@QEAAPEAVJSObject@23@XZ 8115 LTO
?AssignFeedbackSlots@Call@internal@v8@@QEAAXPEAVFeedbackVectorSpec@23@W4LanguageMode@23@PEAVFeedbackSlotCache@23@@Z 7950 LTO
?language_mode@FunctionLiteral@internal@v8@@QEBA?AW4LanguageMode@23@XZ 7395 LTO
?end_position@FunctionLiteral@internal@v8@@QEBAHXZ 7369 LTO
?NewConsString@AstValueFactory@internal@v8@@QEAAPEAVAstConsString@23@XZ 7327 LTO
??0HandleScope@v8@@QEAA@PEAVIsolate@1@@Z 7263 LTO
?PaintingExtent@PaintLayer@blink@@QEAA?AVLayoutRect@2@PEBV12@AEBVLayoutSize@2@I@Z 7259 LTO
?Current@BeginFrameTracker@cc@@QEBAAEBUBeginFrameArgs@2@XZ 7231 LTO
?CachedImage@CSSImageSetValue@blink@@QEBAPEAVStyleImage@2@M@Z 7038 LTO
?DefineOwnPropertyIgnoreAttributes@JSObject@internal@v8@@SA?AV?$MaybeHandle@VObject@internal@v8@@@23@PEAVLookupIterator@23@V?$Handle@VObject@internal@v8@@@23@W4PropertyAttributes@23@W4AccessorInfoHandling@123@@Z 7019 LTO
??0Location@tracked_objects@@QEAA@PEBD0HPEBX@Z 6980 LTO
?DiscardReservedEntry@ConstantArrayBuilder@interpreter@internal@v8@@QEAAXW4OperandSize@234@@Z 6627 LTO
??0CSSParserToken@blink@@QEAA@W4CSSParserTokenType@1@_W@Z 6557 LTO
?ArchiveState@Bootstrapper@internal@v8@@QEAAPEADPEAD@Z 6551 LTO
?AllocateDeferredConstantPoolEntry@BytecodeArrayBuilder@interpreter@internal@v8@@QEAA_KXZ 6166 LTO
?InsertDeferred@ConstantArrayBuilder@interpreter@internal@v8@@QEAA_KXZ 6161 LTO
??BElementId@cc@@QEBA_NXZ 6103 LTO
?findInstanceInPrototypeChain@V8Window@blink@@SA?AV?$Local@VObject@v8@@@v8@@V?$Local@VValue@v8@@@4@PEAVIsolate@4@@Z 6008 LTO
?Client@FrameLoader@blink@@QEBAPEAVLocalFrameClient@2@XZ 5837 LTO
chrome_child_funcs.txt.gz
1.0 MB Download
chrome_funcs.txt.gz
1.4 MB Download
lto_inlinings.txt.gz
680 KB Download
lto_inlinings_and_call_freq.txt
154 KB View Download

Comment 8 by thakis@chromium.org, Jun 20 2017

For people who can't read ms abi mangled symbols, here's the same thing piped through demumble:

protected: void __cdecl v8::internal::ParserBase<class v8::internal::Parser>::GetUnexpectedTokenMessage(enum v8::internal::Token::Value,enum v8::internal::MessageTemplate::Template * __ptr64,struct v8::internal::Scanner::Location * __ptr64,char const * __ptr64 * __ptr64,enum v8::internal::MessageTemplate::Template) __ptr64 431344 LTO
free 277882 LTO
public: enum v8::internal::Token::Value __cdecl v8::internal::Scanner::ScanTemplateContinuation(void) __ptr64 205153 LTO
private: __cdecl v8::internal::VariableProxy::VariableProxy(class v8::internal::AstRawString const * __ptr64,enum v8::internal::VariableKind,int) __ptr64 151841 LTO
private: static void __cdecl v8::internal::HandleScope::ZapRange(class v8::internal::Object * __ptr64 * __ptr64,class v8::internal::Object * __ptr64 * __ptr64) 147654 LTO
public: class v8::internal::VariableProxy * __ptr64 __cdecl v8::internal::Scope::NewUnresolved(class v8::internal::AstNodeFactory * __ptr64,class v8::internal::AstRawString const * __ptr64,int,enum v8::internal::VariableKind) __ptr64 140454 LTO
public: void __cdecl base::internal::LockImpl::Unlock(void) __ptr64 123089 LTO
protected: bool __cdecl base::subtle::RefCountedThreadSafeBase::Release(void)const __ptr64 99526 LTO
protected: void __cdecl base::subtle::RefCountedThreadSafeBase::AddRef(void)const __ptr64 97363 LTO
public: void __cdecl base::internal::LockImpl::Lock(void) __ptr64 89006 LTO
private: __cdecl base::debug::ScopedLockAcquireActivity::ScopedLockAcquireActivity(void const * __ptr64,class base::internal::LockImpl const * __ptr64) __ptr64 86375 LTO
public: static void __cdecl v8::internal::Scavenger::ScavengeObjectSlow(class v8::internal::HeapObject * __ptr64 * __ptr64,class v8::internal::HeapObject * __ptr64) 80931 LTO
public: enum v8::internal::FeedbackSlotKind __cdecl v8::internal::FeedbackVector::GetKind(class v8::internal::FeedbackSlot)const __ptr64 77635 LTO
public: static void * __ptr64 __cdecl base::internal::PlatformThreadLocalStorage::GetTLSValue(unsigned long) 76780 LTO
__int64 __cdecl base::time_internal::SaturatedAdd(class base::TimeDelta,__int64) 66284 LTO
??0?$CallbackBase@$00@internal@base@@QEAA@$$QEAV012@@Z 60376 LTO
public: void __cdecl base::BucketRanges::set_range(unsigned __int64,int) __ptr64 59638 LTO
public: __cdecl v8::internal::Variable::Variable(class v8::internal::Scope * __ptr64,class v8::internal::AstRawString const * __ptr64,enum v8::internal::VariableMode,enum v8::internal::VariableKind,enum v8::internal::InitializationFlag,enum v8::internal::MaybeAssignedFlag) __ptr64 57994 LTO
protected: void __cdecl v8::internal::ParserBase<class v8::internal::PreParser>::GetUnexpectedTokenMessage(enum v8::internal::Token::Value,enum v8::internal::MessageTemplate::Template * __ptr64,struct v8::internal::Scanner::Location * __ptr64,char const * __ptr64 * __ptr64,enum v8::internal::MessageTemplate::Template) __ptr64 52622 LTO
public: void __cdecl v8::internal::SnapshotByteSource::CopyRaw(unsigned char * __ptr64,int) __ptr64 45411 LTO
public: static class base::TimeTicks __cdecl base::TimeTicks::Now(void) 38981 LTO
private: class v8::internal::AllocationResult __cdecl v8::internal::Heap::AllocateFixedArray(int,enum v8::internal::PretenureFlag) __ptr64 37636 LTO
public: __cdecl blink::CSSParserToken::CSSParserToken(enum blink::CSSParserTokenType,enum blink::CSSParserToken::BlockType) __ptr64 35721 LTO
public: static enum v8::internal::VisitorId __cdecl v8::internal::StaticVisitorBase::GetVisitorId(class v8::internal::Map * __ptr64) 32558 LTO
public: static enum v8::internal::VisitorId __cdecl v8::internal::StaticVisitorBase::GetVisitorId(int,int,bool) 32502 LTO
public: void __cdecl v8::base::Mutex::Lock(void) __ptr64 31735 LTO
public: static enum v8::internal::interpreter::OperandSize __cdecl v8::internal::interpreter::Bytecodes::SizeOfOperand(enum v8::internal::interpreter::OperandType,enum v8::internal::interpreter::OperandScale) 30137 LTO
public: class v8::internal::Handle<class v8::internal::Object> __cdecl v8::internal::LookupIterator::GetAccessors(void)const __ptr64 29636 LTO
public: void __cdecl v8::internal::HeapObject::IterateBody(enum v8::internal::InstanceType,int,class v8::internal::ObjectVisitor * __ptr64) __ptr64 29391 LTO
public: class v8::internal::Handle<class v8::internal::Code> __cdecl v8::internal::Builtins::InterpreterEntryTrampoline(void) __ptr64 29036 LTO
private: __cdecl v8::internal::Assignment::Assignment(enum v8::internal::Token::Value,class v8::internal::Expression * __ptr64,class v8::internal::Expression * __ptr64,int) __ptr64 28905 LTO
public: __cdecl v8::internal::StackFrameIterator::StackFrameIterator(class v8::internal::Isolate * __ptr64) __ptr64 26934 LTO
protected: __cdecl v8::internal::StackFrameIteratorBase::StackFrameIteratorBase(class v8::internal::Isolate * __ptr64,bool) __ptr64 26904 LTO
public: __cdecl blink::CSSParserToken::CSSParserToken(enum blink::CSSParserTokenType,class WTF::StringView,enum blink::CSSParserToken::BlockType) __ptr64 23192 LTO
public: __int64 __cdecl base::TimeDelta::InMilliseconds(void)const __ptr64 23118 LTO
public: enum v8::internal::FunctionKind __cdecl v8::internal::FunctionLiteral::kind(void)const __ptr64 22518 LTO
public: __cdecl tracked_objects::Location::Location(class tracked_objects::Location const & __ptr64) __ptr64 22204 LTO
public: class v8::internal::JSGlobalObject * __ptr64 __cdecl v8::internal::Context::global_object(void) __ptr64 20720 LTO
public: class v8::internal::ElementsAccessor * __ptr64 __cdecl v8::internal::JSObject::GetElementsAccessor(void) __ptr64 19608 LTO
protected: __cdecl base::internal::CallbackBase<0>::CallbackBase<0>(class base::internal::BindStateBase * __ptr64) __ptr64 19419 LTO
public: wchar_t __cdecl blink::CSSParserToken::Delimiter(void)const __ptr64 19275 LTO
public: void __cdecl v8::internal::HeapObject::IterateBody(class v8::internal::ObjectVisitor * __ptr64) __ptr64 18727 LTO
public: __cdecl SkString::SkString(void) __ptr64 18565 LTO
public: static bool __cdecl blink::CSSPropertyMetadata::IsInheritedProperty(enum blink::CSSPropertyID) 18177 LTO
public: static bool __cdecl v8::Locker::IsActive(void) 17982 LTO
??0SkString@@QEAA@$$QEAV0@@Z 17250 LTO
??0PendingTask@base@@QEAA@$$QEAU01@@Z 16260 LTO
public: class v8::internal::DeclarationScope * __ptr64 __cdecl v8::internal::ParseInfo::scope(void)const __ptr64 15901 LTO
public: static bool __cdecl v8::internal::Heap::RootIsImmortalImmovable(int) 15872 LTO
public: static class tracked_objects::TrackedTime __cdecl tracked_objects::TrackedTime::Now(void) 15628 LTO
void __cdecl sk_free(void * __ptr64) 15265 LTO
public: static int __cdecl v8::internal::Heap::GetStaticVisitorIdForMap(class v8::internal::Map * __ptr64) 15131 LTO
public: class v8::Isolate * __ptr64 __cdecl v8::Context::GetIsolate(void) __ptr64 14863 LTO
public: bool __cdecl blink::FrameLoaderStateMachine::CreatingInitialEmptyDocument(void)const __ptr64 14750 LTO
public: double __cdecl blink::CSSParserToken::NumericValue(void)const __ptr64 14539 LTO
public: class tracked_objects::Duration __cdecl tracked_objects::TrackedTime::operator-(class tracked_objects::TrackedTime const & __ptr64)const __ptr64 14353 LTO
public: __cdecl v8::internal::Zone::Zone(class v8::internal::AccountingAllocator * __ptr64,char const * __ptr64) __ptr64 14141 LTO
public: static class v8::internal::interpreter::Register __cdecl v8::internal::interpreter::Register::FromParameterIndex(int,int) 14023 LTO
public: static class v8::internal::ScopeInfo * __ptr64 __cdecl v8::internal::ScopeInfo::Empty(class v8::internal::Isolate * __ptr64) 13584 LTO
public: void __cdecl v8::internal::FeedbackNexus::ConfigurePremonomorphic(void) __ptr64 13428 LTO
public: bool __cdecl v8::internal::interpreter::Register::is_current_context(void)const __ptr64 12517 LTO
public: class v8::internal::Handle<class v8::internal::Cell> __cdecl v8::internal::Factory::NewNoClosuresCell(class v8::internal::Handle<class v8::internal::Object>) __ptr64 12407 LTO
public: void __cdecl v8::internal::Assignment::AssignFeedbackSlots(class v8::internal::FeedbackVectorSpec * __ptr64,enum v8::internal::LanguageMode,class v8::internal::FeedbackSlotCache * __ptr64) __ptr64 12237 LTO
public: bool __cdecl base::subtle::RefCountedThreadSafeBase::HasOneRef(void)const __ptr64 11188 LTO
public: static unsigned long __cdecl base::PlatformThread::CurrentId(void) 11184 LTO
public: int __cdecl blink::ConsoleMessageStorage::ExpiredCount(void)const __ptr64 10598 LTO
public: __cdecl v8::internal::FuncNameInferrer::FuncNameInferrer(class v8::internal::AstValueFactory * __ptr64,class v8::internal::Zone * __ptr64) __ptr64 10488 LTO
public: static void __cdecl v8::internal::Parser::PatternRewriter::DeclareAndInitializeVariables(class v8::internal::Parser * __ptr64,class v8::internal::Block * __ptr64,struct v8::internal::ParserBase<class v8::internal::Parser>::DeclarationDescriptor const * __ptr64,struct v8::internal::ParserBase<class v8::internal::Parser>::DeclarationParsingResult::Declaration const * __ptr64,class v8::internal::ZoneList<class v8::internal::AstRawString const * __ptr64> * __ptr64,bool * __ptr64) 10377 LTO
public: static class v8::internal::Descriptor __cdecl v8::internal::Descriptor::DataField(class v8::internal::Handle<class v8::internal::Name>,int,enum v8::internal::PropertyAttributes,enum v8::internal::PropertyConstness,class v8::internal::Representation,class v8::internal::Handle<class v8::internal::Object>) 10236 LTO
protected: void __cdecl base::HistogramSamples::IncreaseSumAndCount(__int64,int) __ptr64 9852 LTO
public: __cdecl v8::internal::Operand::Operand(struct v8::internal::Register,int) __ptr64 9828 LTO
class blink::StylePropertyShorthand const & __ptr64 __cdecl blink::shorthandForProperty(enum blink::CSSPropertyID) 9444 LTO
public: int __cdecl v8::internal::FunctionLiteral::start_position(void)const __ptr64 9359 LTO
public: static class v8::internal::Handle<class v8::internal::TemplateList> __cdecl v8::internal::TemplateList::Add(class v8::internal::Isolate * __ptr64,class v8::internal::Handle<class v8::internal::TemplateList>,class v8::internal::Handle<class v8::internal::Object>) 9003 LTO
public: __cdecl blink::CSSParserToken::CSSParserToken(enum blink::CSSParserTokenType,double,enum blink::NumericValueType,enum blink::NumericSign) __ptr64 8703 LTO
public: static struct blink::CSSPropertyDescriptor const & __ptr64 __cdecl blink::CSSPropertyDescriptor::Get(enum blink::CSSPropertyID) 8606 LTO
public: bool __cdecl v8::internal::LargeObjectSpace::Contains(class v8::internal::HeapObject * __ptr64) __ptr64 8527 LTO
bool __cdecl blink::isShorthandProperty(enum blink::CSSPropertyID) 8446 LTO
public: __cdecl blink::CSSParserSelector::CSSParserSelector(void) __ptr64 8429 LTO
public: bool __cdecl base::internal::CallbackBase<0>::IsCancelled(void)const __ptr64 8247 LTO
public: class v8::internal::interpreter::Register __cdecl v8::internal::interpreter::BytecodeArrayBuilder::Parameter(int)const __ptr64 8236 LTO
public: class v8::internal::JSObject * __ptr64 __cdecl v8::internal::Context::global_proxy(void) __ptr64 8115 LTO
public: void __cdecl v8::internal::Call::AssignFeedbackSlots(class v8::internal::FeedbackVectorSpec * __ptr64,enum v8::internal::LanguageMode,class v8::internal::FeedbackSlotCache * __ptr64) __ptr64 7950 LTO
public: enum v8::internal::LanguageMode __cdecl v8::internal::FunctionLiteral::language_mode(void)const __ptr64 7395 LTO
public: int __cdecl v8::internal::FunctionLiteral::end_position(void)const __ptr64 7369 LTO
public: class v8::internal::AstConsString * __ptr64 __cdecl v8::internal::AstValueFactory::NewConsString(void) __ptr64 7327 LTO
public: __cdecl v8::HandleScope::HandleScope(class v8::Isolate * __ptr64) __ptr64 7263 LTO
public: class blink::LayoutRect __cdecl blink::PaintLayer::PaintingExtent(class blink::PaintLayer const * __ptr64,class blink::LayoutSize const & __ptr64,unsigned int) __ptr64 7259 LTO
public: struct cc::BeginFrameArgs const & __ptr64 __cdecl cc::BeginFrameTracker::Current(void)const __ptr64 7231 LTO
public: class blink::StyleImage * __ptr64 __cdecl blink::CSSImageSetValue::CachedImage(float)const __ptr64 7038 LTO
public: static class v8::internal::MaybeHandle<class v8::internal::Object> __cdecl v8::internal::JSObject::DefineOwnPropertyIgnoreAttributes(class v8::internal::LookupIterator * __ptr64,class v8::internal::Handle<class v8::internal::Object>,enum v8::internal::PropertyAttributes,enum v8::internal::JSObject::AccessorInfoHandling) 7019 LTO
public: __cdecl tracked_objects::Location::Location(char const * __ptr64,char const * __ptr64,int,void const * __ptr64) __ptr64 6980 LTO
public: void __cdecl v8::internal::interpreter::ConstantArrayBuilder::DiscardReservedEntry(enum v8::internal::interpreter::OperandSize) __ptr64 6627 LTO
public: __cdecl blink::CSSParserToken::CSSParserToken(enum blink::CSSParserTokenType,wchar_t) __ptr64 6557 LTO
public: char * __ptr64 __cdecl v8::internal::Bootstrapper::ArchiveState(char * __ptr64) __ptr64 6551 LTO
public: unsigned __int64 __cdecl v8::internal::interpreter::BytecodeArrayBuilder::AllocateDeferredConstantPoolEntry(void) __ptr64 6166 LTO
public: unsigned __int64 __cdecl v8::internal::interpreter::ConstantArrayBuilder::InsertDeferred(void) __ptr64 6161 LTO
public: __cdecl cc::ElementId::operator bool(void)const __ptr64 6103 LTO
public: static class v8::Local<class v8::Object> __cdecl blink::V8Window::findInstanceInPrototypeChain(class v8::Local<class v8::Value>,class v8::Isolate * __ptr64) 6008 LTO
public: class blink::LocalFrameClient * __ptr64 __cdecl blink::FrameLoader::Client(void)const __ptr64 5837 LTO

Project Member

Comment 10 by bugdroid1@chromium.org, Jun 20 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/3029e8547965ce8f4d09019a54d79c1fe1cb3def

commit 3029e8547965ce8f4d09019a54d79c1fe1cb3def
Author: thakis <thakis@chromium.org>
Date: Tue Jun 20 20:49:12 2017

Revert of clang/win: Temporarily slow down renderer startup by 0.1s (patchset #1 id:1 of https://codereview.chromium.org/2944033004/ )

Reason for revert:
Dev channel was cut.

Original issue's description:
> clang/win: Temporarily slow down renderer startup by 0.1s
>
> We're trying to understand why a certain metric is a bit higher with clang
> than with MSVC.  We think this might be due to slower renderer startup, but
> we're not sure.  Slow down renderer startup so we can measure if this is the
> reason.
>
> BUG= 728324 
>
> Review-Url: https://codereview.chromium.org/2944033004
> Cr-Commit-Position: refs/heads/master@{#480707}
> Committed: https://chromium.googlesource.com/chromium/src/+/51a2f1e6d3a9edc207bbc096a827153b1a23d316

TBR=avi@chromium.org,kinuko@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG= 728324 

Review-Url: https://codereview.chromium.org/2949913002
Cr-Commit-Position: refs/heads/master@{#480953}

[modify] https://crrev.com/3029e8547965ce8f4d09019a54d79c1fe1cb3def/content/renderer/renderer_main.cc

Comment 11 by h...@chromium.org, Jun 20 2017

A patch for some of the V8 ones: https://codereview.chromium.org/2950993002/
Project Member

Comment 13 by bugdroid1@chromium.org, Jun 21 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/73f022ae44572601cb364871eaba46088c3c2666

commit 73f022ae44572601cb364871eaba46088c3c2666
Author: hans <hans@chromium.org>
Date: Wed Jun 21 02:34:17 2017

Make LockImpl::Unlock available for inlining

This function is hit frequently and we'd like it to available
for inlining even in non-LTO builds (see bug).

BUG= 728324 

Review-Url: https://codereview.chromium.org/2949953002
Cr-Commit-Position: refs/heads/master@{#481090}

[modify] https://crrev.com/73f022ae44572601cb364871eaba46088c3c2666/base/synchronization/lock_impl.h
[modify] https://crrev.com/73f022ae44572601cb364871eaba46088c3c2666/base/synchronization/lock_impl_posix.cc
[modify] https://crrev.com/73f022ae44572601cb364871eaba46088c3c2666/base/synchronization/lock_impl_win.cc

Project Member

Comment 14 by bugdroid1@chromium.org, Jun 21 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/5e3bdec771619fd558e176dafe393bfe1690078a

commit 5e3bdec771619fd558e176dafe393bfe1690078a
Author: hans <hans@chromium.org>
Date: Wed Jun 21 02:40:35 2017

Make RefCountedThreadSafeBase::AddRef and Release available for inlining

These are hit frequently, and would benefit from inlining even in non-LTO
builds (see bug).

BUG= 728324 

Review-Url: https://codereview.chromium.org/2947863003
Cr-Commit-Position: refs/heads/master@{#481091}

[modify] https://crrev.com/5e3bdec771619fd558e176dafe393bfe1690078a/base/memory/ref_counted.cc
[modify] https://crrev.com/5e3bdec771619fd558e176dafe393bfe1690078a/base/memory/ref_counted.h

Project Member

Comment 15 by bugdroid1@chromium.org, Jun 21 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/7fca9e960b25c90e214c7e900873ae73202d7720

commit 7fca9e960b25c90e214c7e900873ae73202d7720
Author: hans <hans@chromium.org>
Date: Wed Jun 21 02:41:10 2017

Inline BucketRanges::set_range

This is hit frequently, and would benefit from inlining even in non-LTO
builds (see bug).

BUG= 728324 

Review-Url: https://codereview.chromium.org/2949983002
Cr-Commit-Position: refs/heads/master@{#481092}

[modify] https://crrev.com/7fca9e960b25c90e214c7e900873ae73202d7720/base/metrics/bucket_ranges.cc
[modify] https://crrev.com/7fca9e960b25c90e214c7e900873ae73202d7720/base/metrics/bucket_ranges.h

Project Member

Comment 16 by bugdroid1@chromium.org, Jun 21 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/56e130ab164dbd2949c0355a273d97d0c9d0d4a3

commit 56e130ab164dbd2949c0355a273d97d0c9d0d4a3
Author: hans <hans@chromium.org>
Date: Wed Jun 21 02:54:09 2017

Inline PlatformThreadLocalStorage::GetTLSValue

This is hit frequently, and would benefit from inlining even in non-LTO
builds (see bug).

BUG= 728324 

Review-Url: https://codereview.chromium.org/2948003003
Cr-Commit-Position: refs/heads/master@{#481093}

[modify] https://crrev.com/56e130ab164dbd2949c0355a273d97d0c9d0d4a3/base/threading/thread_local_storage.h
[modify] https://crrev.com/56e130ab164dbd2949c0355a273d97d0c9d0d4a3/base/threading/thread_local_storage_posix.cc
[modify] https://crrev.com/56e130ab164dbd2949c0355a273d97d0c9d0d4a3/base/threading/thread_local_storage_win.cc

Project Member

Comment 17 by bugdroid1@chromium.org, Jun 21 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/a8a293697a89e19a3ac294cf303f18d7e41237d8

commit a8a293697a89e19a3ac294cf303f18d7e41237d8
Author: hans <hans@chromium.org>
Date: Wed Jun 21 06:30:44 2017

Inline CSSParserToken::CSSParserToken

These functions are hit frequently and we'd like them to be available
for inlining even in non-LTO builds (see bug).

BUG= 728324 

Review-Url: https://codereview.chromium.org/2945173003
Cr-Commit-Position: refs/heads/master@{#481124}

[modify] https://crrev.com/a8a293697a89e19a3ac294cf303f18d7e41237d8/third_party/WebKit/Source/core/css/parser/CSSParserToken.cpp
[modify] https://crrev.com/a8a293697a89e19a3ac294cf303f18d7e41237d8/third_party/WebKit/Source/core/css/parser/CSSParserToken.h

Comment 18 Deleted

Comment 19 by h...@chromium.org, Jun 23 2017

The V8 patch landed: https://codereview.chromium.org/2950993002/

Comment 20 by h...@chromium.org, Jun 23 2017

I don't have the LTO log from linking chrome.dll, but let's look at the top functions and see if some are ripe for inlining. From chrome_funcs.txt in #7:

?_Myptr@?$_String_val@U?$_Simple_types@D@std@@@std@@QEAAPEADXZ (3409465)
?_Myptr@?$_String_alloc@U?$_String_base_types@DV?$allocator@D@std@@@std@@@std@@QEAAPEADXZ (1940311)
?_Eos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_K@Z (1317422)
?is_valid@WeakReference@internal@base@@QEBA_NXZ (1054522)
get_heap_handle (954092)
?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_N_K@Z (864446)
?get@?$WeakPtr@$$CBVAudioOutputAuthorizationHandler@content@@@base@@QEBAPEBVAudioOutputAuthorizationHandler@content@@XZ (711121)
?find@?$char_traits@D@std@@SAPEBDPEBD_KAEBD@Z (592130)
?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z (585295)
?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z (584661)
malloc (518049)
bn_wexpand (517490)
?WinCallNewHandler@allocator@base@@YA_N_K@Z (516372)
?WinHeapMalloc@allocator@base@@YAPEAX_K@Z (515859)
free (442141)
?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA_N_K_N@Z (440040)
?WinHeapFree@allocator@base@@YAXPEAX@Z (439240)
??1?$BooleanCapability@VCollateTraits@printer@cloud_devices@@@cloud_devices@@QEAA@XZ (395234)
??C?$WeakPtr@V?$ObserverListBase@VActivationChangeObserver@wm@@@base@@@base@@QEBAPEAV?$ObserverListBase@VActivationChangeObserver@wm@@@1@XZ (316246)
??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@XZ (295493)
bn_correct_top (290682)
?compare@?$char_traits@D@std@@SAHPEBD0_K@Z (282099)
??B?$WeakPtr@$$CBVAudioOutputAuthorizationHandler@content@@@base@@QEBA_NXZ (275867)
?copy@?$char_traits@D@std@@SAPEADPEADPEBD_K@Z (272855)
?_Traits_compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@SAHQEBD_K01@Z (248759)
?GetProgramCounter@tracked_objects@@YAPEBXXZ (248586)
?push_back@?$CanonOutputT@D@url@@QEAAXD@Z (241238)
?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAHAEBV12@@Z (233978)
?length@?$char_traits@D@std@@SA_KPEBD@Z (232074)
?Release@RefCountedThreadSafeBase@subtle@base@@IEBA_NXZ (230742)
?IsEmpty@Size@gfx@@QEBA_NXZ (221585)
?IsEmpty@Rect@gfx@@QEBA_NXZ (220416)
?AddRef@RefCountedThreadSafeBase@subtle@base@@IEBAXXZ (215497)
??0?$hb_auto_trace_t@$0A@AEBUCoverage@OT@@@@QEAA@PEAIPEBDPEBX11ZZ (205468)
?_Adopt@_Iterator_base12@std@@QEAAXPEBU_Container_base12@2@@Z (205148)
??1ScopedThreadActivity@GlobalActivityTracker@debug@base@@QEAA@XZ (200445)
??0ScopedThreadActivity@GlobalActivityTracker@debug@base@@QEAA@PEBX0W4Type@Activity@23@AEBTActivityData@23@_N@Z (195863)
??$?RAEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAV01@@?$less@X@std@@QEBA_NAEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@0@Z (193762)
?Unlock@LockImpl@internal@base@@QEAAXXZ (188299)
??$saturated_cast@HUSaturationDefaultHandler@base@@M@internal@base@@YAHM@Z (187056)
??$saturated_cast_impl@HUSaturationDefaultHandler@base@@M@internal@base@@YAHMVRangeCheck@01@@Z (186979)
?Lock@LockImpl@internal@base@@QEAAXXZ (186210)
??1?$CallbackBase@$0A@@internal@base@@IEAA@XZ (185256)
??0ScopedLockAcquireActivity@debug@base@@AEAA@PEBXPEBVLockImpl@internal@2@@Z (184882)
?clamped_max_index@?$Iter@$$CBV?$ObserverListBase@VRTTAndThroughputEstimatesObserver@net@@@base@@@?$ObserverListBase@VRTTAndThroughputEstimatesObserver@net@@@base@@AEBA_KXZ (176249)
?_Myptr@?$_String_val@U?$_Simple_types@_W@std@@@std@@QEAAPEA_WXZ (174708)
?GetClampedValue@Rect@gfx@@CAHHH@Z (171895)
?AddWouldOverflow@Rect@gfx@@CA_NHH@Z (171845)
?_Check_offset@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAX_K@Z (171539)
?IsValid@RangeCheck@internal@base@@QEBA_NXZ (169339)
?GetTLSValue@PlatformThreadLocalStorage@internal@base@@SAPEAXK@Z (167654)
Project Member

Comment 21 by bugdroid1@chromium.org, Jun 25 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87

commit 410a753ba2b0795e9d9b309c3a11ee5af6ab7b87
Author: machenbach <machenbach@chromium.org>
Date: Sun Jun 25 20:34:35 2017

Revert of Make some functions that are hit during renderer startup available for inlining (patchset #3 id:40001 of https://codereview.chromium.org/2950993002/ )

Reason for revert:
Blocks roll:
https://codereview.chromium.org/2954833002/

E.g.:
https://build.chromium.org/p/tryserver.chromium.mac/builders/mac_chromium_compile_dbg_ng/builds/449680
https://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_compile_dbg_ng/builds/324953

Please include those chromium trybots on reland. Maybe missing symbol export?

Original issue's description:
> Make some functions that are hit during renderer startup available for inlining
>
> This is towards closing the perf gap between the MSVC build (which uses link-
> time optimization) and Clang (where LTO isn't ready on Windows yet). We did
> a study (see bug) to see which non-inlined functions are hit a lot during render
> start-up, and which would be inlined during LTO. This should benefit performance
> in all builds which currently don't use LTO (Android, Linux, Mac) as well as
> the Win/Clang build.
>
> The binary size of chrome_child.dll increases by 2KB with this.
>
> BUG= chromium:728324 
>
> Review-Url: https://codereview.chromium.org/2950993002
> Cr-Commit-Position: refs/heads/master@{#46191}
> Committed: https://chromium.googlesource.com/v8/v8/+/d00d52be1fce9c1bf5558c8b26bf984efd09e65b

TBR=jochen@chromium.org,mstarzinger@chromium.org,rmcilroy@chromium.org,vogelheim@chromium.org,marja@chromium.org,mlippautz@chromium.org,thakis@chromium.org,hans@chromium.org
# Not skipping CQ checks because original CL landed more than 1 days ago.
BUG= chromium:728324 
NOTRY=true
NOPRESUBMIT=true

Review-Url: https://codereview.chromium.org/2955793002
Cr-Commit-Position: refs/heads/master@{#46195}

[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/ast/ast.cc
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/ast/ast.h
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/ast/scopes.cc
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/ast/scopes.h
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/ast/variables.cc
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/ast/variables.h
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/heap/heap-inl.h
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/heap/heap.cc
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/heap/heap.h
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/heap/objects-visiting-inl.h
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/heap/objects-visiting.cc
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/heap/objects-visiting.h
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/heap/scavenger-inl.h
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/heap/scavenger.cc
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/heap/scavenger.h
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/interpreter/bytecodes.cc
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/interpreter/bytecodes.h
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/parsing/scanner.cc
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/parsing/scanner.h
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/snapshot/snapshot-source-sink.cc
[modify] https://crrev.com/410a753ba2b0795e9d9b309c3a11ee5af6ab7b87/src/snapshot/snapshot-source-sink.h

Project Member

Comment 22 by bugdroid1@chromium.org, Jun 26 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/v8/v8.git/+/777da354d20286d39048f1421d89fa109e38b9e1

commit 777da354d20286d39048f1421d89fa109e38b9e1
Author: hans <hans@chromium.org>
Date: Mon Jun 26 18:17:05 2017

Make some functions that are hit during renderer startup available for inlining

This is towards closing the perf gap between the MSVC build (which uses link-
time optimization) and Clang (where LTO isn't ready on Windows yet). We did
a study (see bug) to see which non-inlined functions are hit a lot during render
start-up, and which would be inlined during LTO. This should benefit performance
in all builds which currently don't use LTO (Android, Linux, Mac) as well as
the Win/Clang build.

The binary size of chrome_child.dll increases by 2KB with this.

BUG= chromium:728324 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_chromium_compile_dbg_ng;master.tryserver.chromium.mac:mac_chromium_compile_dbg_ng

Review-Url: https://codereview.chromium.org/2950993002
Cr-Commit-Position: refs/heads/master@{#46229}

[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/ast/ast.cc
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/ast/ast.h
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/ast/scopes.cc
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/ast/scopes.h
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/ast/variables.cc
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/ast/variables.h
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/heap/heap-inl.h
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/heap/heap.cc
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/heap/heap.h
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/heap/objects-visiting-inl.h
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/heap/objects-visiting.cc
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/heap/objects-visiting.h
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/heap/scavenger-inl.h
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/heap/scavenger.cc
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/heap/scavenger.h
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/interpreter/bytecodes.cc
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/interpreter/bytecodes.h
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/parsing/scanner.cc
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/parsing/scanner.h
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/snapshot/snapshot-source-sink.cc
[modify] https://crrev.com/777da354d20286d39048f1421d89fa109e38b9e1/src/snapshot/snapshot-source-sink.h

Comment 23 by h...@chromium.org, Jun 26 2017

The V8 patch was rolled into Chromium here: https://codereview.chromium.org/2957903002/
Project Member

Comment 24 by bugdroid1@chromium.org, Jun 28 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/d2a722f6bd23eaf0f791b19378c639dce6b3c2c0

commit d2a722f6bd23eaf0f791b19378c639dce6b3c2c0
Author: hans <hans@chromium.org>
Date: Wed Jun 28 21:12:54 2017

Move base::WeakPtrFactory's ctor and dtor out-of-line

They already invoke the out-of-line ctor/dtor for WeakReferenceOwner, so
inlining the bit that sets up ptr_ is not a performance improvement and costs
binary size.

Since WeakPtrFactory is a template, move the members into a non-template
base-class with the ctor/dtor out-of-line.

This is expected to reduce the binary size by ~4KB on Android and 24KB on x64 Linux.

BUG= 728324 

Review-Url: https://codereview.chromium.org/2959203002
Cr-Commit-Position: refs/heads/master@{#483139}

[modify] https://crrev.com/d2a722f6bd23eaf0f791b19378c639dce6b3c2c0/base/memory/weak_ptr.cc
[modify] https://crrev.com/d2a722f6bd23eaf0f791b19378c639dce6b3c2c0/base/memory/weak_ptr.h

Project Member

Comment 25 by bugdroid1@chromium.org, Jun 29 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/526f714c9ae172c3b16581b7e11eb035fd14274e

commit 526f714c9ae172c3b16581b7e11eb035fd14274e
Author: hans <hans@chromium.org>
Date: Thu Jun 29 18:22:36 2017

Make base::WeakPtr::Get() fast

It was previously calling WeakReference::is_valid() which was an out-of-line
method. That means code like

  if (my_weak_ptr)
    my_weak_ptr->foo();

would do two calls to is_valid(), plus tests and branching.

The is_valid() method showed up as one of the most frequently called non-inline
functions during browser start-up on Windows (about 1M calls).

is_valid() was also inefficient because it had to do a null-pointer check on
flag_, as well as checking if the flag was marked valid.

This patch removes the null-pointer check by using a sentinel object instead of
a nullptr. And instead of storing a bool in the flag, it stores a pointer-sized
bitmask 0 or ~0, so it can be AND'ed with the pointer value and conveniently
setting EFLAGS so that the code above just becomes a few loads, AND, branch,
and call. (The size of Flag is unchanged; it grows into the padding only.)

This is expected to reduce the binary size by ~48KB on Android, and increase it
by 79KB on x64 Linux -- something that's paid for by the split-out refactorings
to WeakPtr and WeakPtrFactory.

Exposing the SequenceChecker calls in inline functions caused the
MessageLoopTestType*.Nesting test to overflow on Win64 dcheck release builds,
which is why this patch also lowers the recursion depth there.

BUG= 728324 

Review-Url: https://codereview.chromium.org/2963623002
Cr-Commit-Position: refs/heads/master@{#483427}

[modify] https://crrev.com/526f714c9ae172c3b16581b7e11eb035fd14274e/base/memory/weak_ptr.cc
[modify] https://crrev.com/526f714c9ae172c3b16581b7e11eb035fd14274e/base/memory/weak_ptr.h
[modify] https://crrev.com/526f714c9ae172c3b16581b7e11eb035fd14274e/base/message_loop/message_loop_test.cc

Project Member

Comment 26 by bugdroid1@chromium.org, Jun 29 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/cc65b2990c22909896c5b08ad5e6b159a6bef5f5

commit cc65b2990c22909896c5b08ad5e6b159a6bef5f5
Author: hans <hans@chromium.org>
Date: Thu Jun 29 20:35:42 2017

Move base::WeakPtr's null ctor out-of-line

They already invoke the out-of-line constructor for WeakPtrBase (which needs to
set up the WeakReference, so being out of line makes sense). Because of that,
doing ptr_ = nullptr inline doesn't any performance but costs size.

Since WeakPtr is a template, move the ptr_ member into the non-template
WeakPtrBase and initialize it in that class's out-of-line ctor.

This is expected to reduce the binary size by ~8KB on Android and 48KB on x64 Linux.

BUG= 728324 

Review-Url: https://codereview.chromium.org/2961083002
Cr-Commit-Position: refs/heads/master@{#483474}

[modify] https://crrev.com/cc65b2990c22909896c5b08ad5e6b159a6bef5f5/base/memory/weak_ptr.cc
[modify] https://crrev.com/cc65b2990c22909896c5b08ad5e6b159a6bef5f5/base/memory/weak_ptr.h
[modify] https://crrev.com/cc65b2990c22909896c5b08ad5e6b159a6bef5f5/base/memory/weak_ptr_unittest.nc

Project Member

Comment 27 by bugdroid1@chromium.org, Jun 29 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/24046fd36c1a132243a7ffd279f59734f947d223

commit 24046fd36c1a132243a7ffd279f59734f947d223
Author: hans <hans@chromium.org>
Date: Thu Jun 29 22:07:42 2017

Revert of Make base::WeakPtr::Get() fast (patchset #10 id:180001 of https://codereview.chromium.org/2963623002/ )

Reason for revert:
This seems to have broken Cronet tests and Linux TSan. See bugs.

Original issue's description:
> Make base::WeakPtr::Get() fast
>
> It was previously calling WeakReference::is_valid() which was an out-of-line
> method. That means code like
>
>   if (my_weak_ptr)
>     my_weak_ptr->foo();
>
> would do two calls to is_valid(), plus tests and branching.
>
> The is_valid() method showed up as one of the most frequently called non-inline
> functions during browser start-up on Windows (about 1M calls).
>
> is_valid() was also inefficient because it had to do a null-pointer check on
> flag_, as well as checking if the flag was marked valid.
>
> This patch removes the null-pointer check by using a sentinel object instead of
> a nullptr. And instead of storing a bool in the flag, it stores a pointer-sized
> bitmask 0 or ~0, so it can be AND'ed with the pointer value and conveniently
> setting EFLAGS so that the code above just becomes a few loads, AND, branch,
> and call. (The size of Flag is unchanged; it grows into the padding only.)
>
> This is expected to reduce the binary size by ~48KB on Android, and increase it
> by 79KB on x64 Linux -- something that's paid for by the split-out refactorings
> to WeakPtr and WeakPtrFactory.
>
> Exposing the SequenceChecker calls in inline functions caused the
> MessageLoopTestType*.Nesting test to overflow on Win64 dcheck release builds,
> which is why this patch also lowers the recursion depth there.
>
> BUG= 728324 
>
> Review-Url: https://codereview.chromium.org/2963623002
> Cr-Commit-Position: refs/heads/master@{#483427}
> Committed: https://chromium.googlesource.com/chromium/src/+/526f714c9ae172c3b16581b7e11eb035fd14274e

TBR=thakis@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG= 728324 , 738167 , 738183 , 738193 

Review-Url: https://codereview.chromium.org/2966633002
Cr-Commit-Position: refs/heads/master@{#483509}

[modify] https://crrev.com/24046fd36c1a132243a7ffd279f59734f947d223/base/memory/weak_ptr.cc
[modify] https://crrev.com/24046fd36c1a132243a7ffd279f59734f947d223/base/memory/weak_ptr.h
[modify] https://crrev.com/24046fd36c1a132243a7ffd279f59734f947d223/base/message_loop/message_loop_test.cc

Project Member

Comment 28 by bugdroid1@chromium.org, Jun 30 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/79eb7ebaabeb87fd76da56f35de0ab5776806a15

commit 79eb7ebaabeb87fd76da56f35de0ab5776806a15
Author: hans <hans@chromium.org>
Date: Fri Jun 30 18:14:48 2017

Outline RefCountedThreadSafeBase::AddRef and Release on non-X86

They were made inline in #481091, which caused a size drop on X86 and
size increase on ARM.

The code sequence on ARM is larger than on X86, and probably not worth
inlining.

BUG= 728324 , 736015 

Review-Url: https://codereview.chromium.org/2961413003
Cr-Commit-Position: refs/heads/master@{#483759}

[modify] https://crrev.com/79eb7ebaabeb87fd76da56f35de0ab5776806a15/base/memory/ref_counted.cc
[modify] https://crrev.com/79eb7ebaabeb87fd76da56f35de0ab5776806a15/base/memory/ref_counted.h

Project Member

Comment 29 by bugdroid1@chromium.org, Jul 17 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/3856eab55bb241fb054a878d9922e65e7b5b0931

commit 3856eab55bb241fb054a878d9922e65e7b5b0931
Author: hans <hans@chromium.org>
Date: Mon Jul 17 12:03:22 2017

Make base::WeakPtr::Get() fast

It was previous calling the out-of-line method WeakReference::is_valid().
That means that code like

  if (my_weak_ptr)
    my_weak_ptr->foo();

would do two calls to is_valid(), plus tests and branching.

The is_valid() method showed up as one of the most frequently called non-inline
functions during browser start-up on Windows (about 1M calls).

is_valid() was also inefficient in itself, because it had to do a null-check
flag_, as well as checking if the flag was marked valid.

This patch removes the null-pointer check by using a sentinel Flag object instead of
a nullptr. And instead of storing a bool in the Flag, it stores a pointer-sized
bitmask 0 or ~0, so it can be AND'ed with the pointer value and conveniently
setting EFLAGS so that the code above just becomes a few loads, AND, branch,
and call. (The size of Flag is unchanged; it grows into the padding only.)

This is expected to reduce the binary size by ~48KB on Android, and increase it
by 79KB on x64 Linux -- something that's paid for by the split-out refactorings
to WeakPtr and WeakPtrFactory.

Exposing the SequenceChecker calls in inline functions caused the
MessageLoopTestType*.Nesting test to overflow on Win64 dcheck release builds,
which is why this patch also lowers the recursion depth there.

BUG= 728324 , 738183 , 738193 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.android:android_cronet_tester

Review-Url: https://codereview.chromium.org/2963623002
Cr-Commit-Position: refs/heads/master@{#487048}

[modify] https://crrev.com/3856eab55bb241fb054a878d9922e65e7b5b0931/base/memory/weak_ptr.cc
[modify] https://crrev.com/3856eab55bb241fb054a878d9922e65e7b5b0931/base/memory/weak_ptr.h
[modify] https://crrev.com/3856eab55bb241fb054a878d9922e65e7b5b0931/base/message_loop/message_loop_test.cc

Project Member

Comment 30 by bugdroid1@chromium.org, Aug 8 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/4cfa301cda2ab84a496f3c13a5e3fa2f8de94fca

commit 4cfa301cda2ab84a496f3c13a5e3fa2f8de94fca
Author: Hans Wennborg <hans@chromium.org>
Date: Tue Aug 08 03:33:38 2017

Revert "Make base::WeakPtr::Get() fast"

This reverts commit 71f161e3bd95827876f67c656168f936d88a6e3a and
3856eab55bb241fb054a878d9922e65e7b5b0931.

Reason for revert:
I'm backing out the WeakPtr changes. While the new code was objectively
better, it didn't show on any perf bots, regressed size on Linux quite a
bit because the new code was smaller and thus inlined more often, and
seems to have introduced a new crasher on Android. To summarize: it seems
it's not worth it.  The WeakPtr revert will be done in two patches. The
first part is in https://chromium-review.googlesource.com/c/604087
This second part should be merged to M61.

Original change's description:
> Make base::WeakPtr::Get() fast
>
> It was previous calling the out-of-line method WeakReference::is_valid().
> That means that code like
>
>   if (my_weak_ptr)
>     my_weak_ptr->foo();
>
> would do two calls to is_valid(), plus tests and branching.
>
> The is_valid() method showed up as one of the most frequently called non-inline
> functions during browser start-up on Windows (about 1M calls).
>
> is_valid() was also inefficient in itself, because it had to do a null-check
> flag_, as well as checking if the flag was marked valid.
>
> This patch removes the null-pointer check by using a sentinel Flag object instead of
> a nullptr. And instead of storing a bool in the Flag, it stores a pointer-sized
> bitmask 0 or ~0, so it can be AND'ed with the pointer value and conveniently
> setting EFLAGS so that the code above just becomes a few loads, AND, branch,
> and call. (The size of Flag is unchanged; it grows into the padding only.)
>
> This is expected to reduce the binary size by ~48KB on Android, and increase it
> by 79KB on x64 Linux -- something that's paid for by the split-out refactorings
> to WeakPtr and WeakPtrFactory.
>
> Exposing the SequenceChecker calls in inline functions caused the
> MessageLoopTestType*.Nesting test to overflow on Win64 dcheck release builds,
> which is why this patch also lowers the recursion depth there.
>
> BUG= 728324 , 738183 , 738193 
> CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.android:android_cronet_tester
>
> Review-Url: https://codereview.chromium.org/2963623002
> Cr-Commit-Position: refs/heads/master@{#487048}

BUG=748495, 748075 , 744747 

Change-Id: Id85da06115ab9453267ade4d6f8efcfd1b26220c
Reviewed-on: https://chromium-review.googlesource.com/604088
Commit-Queue: Hans Wennborg <hans@chromium.org>
Reviewed-by: Nico Weber <thakis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#492520}
[modify] https://crrev.com/4cfa301cda2ab84a496f3c13a5e3fa2f8de94fca/base/memory/weak_ptr.cc
[modify] https://crrev.com/4cfa301cda2ab84a496f3c13a5e3fa2f8de94fca/base/memory/weak_ptr.h

Project Member

Comment 31 by bugdroid1@chromium.org, Aug 10 2017

Labels: merge-merged-3163
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/f393cc0504d4da327d541a054c404aa422470c1c

commit f393cc0504d4da327d541a054c404aa422470c1c
Author: Hans Wennborg <hans@chromium.org>
Date: Thu Aug 10 15:45:38 2017

Revert "Make base::WeakPtr::Get() fast"

This reverts commit 71f161e3bd95827876f67c656168f936d88a6e3a and
3856eab55bb241fb054a878d9922e65e7b5b0931.

Reason for revert:
I'm backing out the WeakPtr changes. While the new code was objectively
better, it didn't show on any perf bots, regressed size on Linux quite a
bit because the new code was smaller and thus inlined more often, and
seems to have introduced a new crasher on Android. To summarize: it seems
it's not worth it.  The WeakPtr revert will be done in two patches. The
first part is in https://chromium-review.googlesource.com/c/604087
This second part should be merged to M61.

Original change's description:
> Make base::WeakPtr::Get() fast
>
> It was previous calling the out-of-line method WeakReference::is_valid().
> That means that code like
>
>   if (my_weak_ptr)
>     my_weak_ptr->foo();
>
> would do two calls to is_valid(), plus tests and branching.
>
> The is_valid() method showed up as one of the most frequently called non-inline
> functions during browser start-up on Windows (about 1M calls).
>
> is_valid() was also inefficient in itself, because it had to do a null-check
> flag_, as well as checking if the flag was marked valid.
>
> This patch removes the null-pointer check by using a sentinel Flag object instead of
> a nullptr. And instead of storing a bool in the Flag, it stores a pointer-sized
> bitmask 0 or ~0, so it can be AND'ed with the pointer value and conveniently
> setting EFLAGS so that the code above just becomes a few loads, AND, branch,
> and call. (The size of Flag is unchanged; it grows into the padding only.)
>
> This is expected to reduce the binary size by ~48KB on Android, and increase it
> by 79KB on x64 Linux -- something that's paid for by the split-out refactorings
> to WeakPtr and WeakPtrFactory.
>
> Exposing the SequenceChecker calls in inline functions caused the
> MessageLoopTestType*.Nesting test to overflow on Win64 dcheck release builds,
> which is why this patch also lowers the recursion depth there.
>
> BUG= 728324 , 738183 , 738193 
> CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.android:android_cronet_tester
>
> Review-Url: https://codereview.chromium.org/2963623002
> Cr-Commit-Position: refs/heads/master@{#487048}

BUG=748495, 748075 , 744747 
TBR=hans@chromium.org

(cherry picked from commit 4cfa301cda2ab84a496f3c13a5e3fa2f8de94fca)

Change-Id: Id85da06115ab9453267ade4d6f8efcfd1b26220c
Reviewed-on: https://chromium-review.googlesource.com/604088
Commit-Queue: Hans Wennborg <hans@chromium.org>
Reviewed-by: Nico Weber <thakis@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#492520}
Reviewed-on: https://chromium-review.googlesource.com/610446
Reviewed-by: Hans Wennborg <hans@chromium.org>
Cr-Commit-Position: refs/branch-heads/3163@{#432}
Cr-Branched-From: ff259bab28b35d242e10186cd63af7ed404fae0d-refs/heads/master@{#488528}
[modify] https://crrev.com/f393cc0504d4da327d541a054c404aa422470c1c/base/memory/weak_ptr.cc
[modify] https://crrev.com/f393cc0504d4da327d541a054c404aa422470c1c/base/memory/weak_ptr.h

Project Member

Comment 32 by bugdroid1@chromium.org, Nov 27 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/3f073d71053f12f66f67e94ed8b397ca34652ada

commit 3f073d71053f12f66f67e94ed8b397ca34652ada
Author: Hans Wennborg <hans@chromium.org>
Date: Mon Nov 27 22:33:35 2017

Add build config and docs for generating Windows link order files

There are three pieces to this puzzle:

1) Passing the -finstrument-functions-after-inlining flag to all
   compiler invocations.

2) Implementing the __cyg_profile_func_enter function.

3) Making all .exe and .dll targets link in the library that provides
   that function.

This patch implements those three, losely modeled on how the Android
build works, and adds documentation on how to use this to update the
order files.

Bug:  728324 
Change-Id: I778bc8c0c2800244b8f18037197d62223ef92203
Reviewed-on: https://chromium-review.googlesource.com/783830
Commit-Queue: Hans Wennborg <hans@chromium.org>
Reviewed-by: Brett Wilson <brettw@chromium.org>
Reviewed-by: Reid Kleckner <rnk@chromium.org>
Cr-Commit-Position: refs/heads/master@{#519429}
[modify] https://crrev.com/3f073d71053f12f66f67e94ed8b397ca34652ada/build/config/BUILD.gn
[modify] https://crrev.com/3f073d71053f12f66f67e94ed8b397ca34652ada/build/config/BUILDCONFIG.gn
[modify] https://crrev.com/3f073d71053f12f66f67e94ed8b397ca34652ada/build/config/chrome_build.gni
[modify] https://crrev.com/3f073d71053f12f66f67e94ed8b397ca34652ada/build/config/win/BUILD.gn
[modify] https://crrev.com/3f073d71053f12f66f67e94ed8b397ca34652ada/chrome/build/README
[add] https://crrev.com/3f073d71053f12f66f67e94ed8b397ca34652ada/docs/win_order_files.md
[add] https://crrev.com/3f073d71053f12f66f67e94ed8b397ca34652ada/tools/cygprofile_win/BUILD.gn
[add] https://crrev.com/3f073d71053f12f66f67e94ed8b397ca34652ada/tools/cygprofile_win/OWNERS
[add] https://crrev.com/3f073d71053f12f66f67e94ed8b397ca34652ada/tools/cygprofile_win/cygprofile.cc

Comment 33 by h...@chromium.org, Dec 11 2017

Status: Fixed (was: Started)
There's no more planned work for this.
Project Member

Comment 34 by bugdroid1@chromium.org, Mar 8 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/7ba450fdfff078d0cc9b29bf8ed7cc2c39514d74

commit 7ba450fdfff078d0cc9b29bf8ed7cc2c39514d74
Author: Nico Weber <thakis@chromium.org>
Date: Thu Mar 08 19:58:46 2018

win: Use order files with lld as well.

Bug:  792131 ,  728324 
Change-Id: I3b2ebe4a2073b6a03193dac5c497dbd3c53fc06d
Reviewed-on: https://chromium-review.googlesource.com/955726
Reviewed-by: Reid Kleckner <rnk@chromium.org>
Commit-Queue: Nico Weber <thakis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#541874}
[modify] https://crrev.com/7ba450fdfff078d0cc9b29bf8ed7cc2c39514d74/chrome/BUILD.gn

Project Member

Comment 35 by bugdroid1@chromium.org, Mar 9 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/33f64ee226c18ccae818398d57827a7407a8326c

commit 33f64ee226c18ccae818398d57827a7407a8326c
Author: Nico Weber <thakis@chromium.org>
Date: Fri Mar 09 04:45:30 2018

Revert "win: Use order files with lld as well."

This reverts commit 7ba450fdfff078d0cc9b29bf8ed7cc2c39514d74.

Reason for revert: lld-link currently warns if the orderfile
references non-existing functions, without implementing the flag
to disable that warning. Since our orderfiles are usually somewhat
out of date, lld-link currently always warns. Reland once
https://llvm.org/PR36657 is fixed and rolled in.

Original change's description:
> win: Use order files with lld as well.
> 
> Bug:  792131 ,  728324 
> Change-Id: I3b2ebe4a2073b6a03193dac5c497dbd3c53fc06d
> Reviewed-on: https://chromium-review.googlesource.com/955726
> Reviewed-by: Reid Kleckner <rnk@chromium.org>
> Commit-Queue: Nico Weber <thakis@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#541874}

TBR=thakis@chromium.org,rnk@chromium.org

Change-Id: Ic9c6b7e94b99559c88a61fb22df253becf6853e9
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug:  792131 ,  728324 
Reviewed-on: https://chromium-review.googlesource.com/956035
Reviewed-by: Nico Weber <thakis@chromium.org>
Commit-Queue: Nico Weber <thakis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#542027}
[modify] https://crrev.com/33f64ee226c18ccae818398d57827a7407a8326c/chrome/BUILD.gn

Project Member

Comment 36 by bugdroid1@chromium.org, Mar 20 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/34cd61b76197dcefbd5cf9c40c72d2827e2289fb

commit 34cd61b76197dcefbd5cf9c40c72d2827e2289fb
Author: Hans Wennborg <hans@chromium.org>
Date: Tue Mar 20 10:55:19 2018

Reland "win: Use order files with lld as well."

This reverts commit 33f64ee226c18ccae818398d57827a7407a8326c.

After the latest Clang roll, lld will not warn about missing symbols
from the order file, so enable the use of order files again.

Originally reviewed at https://chromium-review.googlesource.com/955726

TBR=thakis@chromium.org,rnk@chromium.org
Bug:  792131 ,  728324 

Change-Id: I6662f40b9b36063eec172728027b82d96a2cd487
Reviewed-on: https://chromium-review.googlesource.com/970421
Reviewed-by: Hans Wennborg <hans@chromium.org>
Commit-Queue: Hans Wennborg <hans@chromium.org>
Cr-Commit-Position: refs/heads/master@{#544326}
[modify] https://crrev.com/34cd61b76197dcefbd5cf9c40c72d2827e2289fb/chrome/BUILD.gn

Is there a summary of the effect on metrics now that all the changes have landed?
Nothing public. We've been tracking various UMA metrics (including this one) on our internal mailining list, you can see the posts at https://groups.google.com/a/google.com/forum/#!searchin/lexan/%22uma$20numbers$20for%22%7Csort:date

https://groups.google.com/a/google.com/forum/#!searchin/lexan/"uma$20numbers$20for"|sort:date/lexan/XmbfWv01-mw/4-D8cQsKDwAJ is the first post with the order file activated.

Sign in to add a comment