author | Ryan VanderMeulen <ryanvm@gmail.com> |
Sat, 07 Jan 2017 22:14:35 -0500 | |
changeset 328467 | 4ece183563a44eab8f410818aa2c7984992dbb8d |
parent 328463 | c557bb902365968f8423338d6c7ab805b2a9bf4a (current diff) |
parent 328466 | ef46d5e347e2d4147ff7bbae51a07b374d022638 (diff) |
child 328468 | 07611cb7a7e1c2bd33e844b4ce1d3075ec09da39 |
child 328470 | c2f372cf7314844b996a1c001af4a763c7cccabb |
child 328491 | f037753a1db2db25ebf344fbd8cfedfb28e10958 |
push id | 31172 |
push user | ryanvm@gmail.com |
push date | Sun, 08 Jan 2017 03:14:42 +0000 |
treeherder | mozilla-central@4ece183563a4 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | merge |
milestone | 53.0a1 |
first release with | nightly linux32
4ece183563a4
/
53.0a1
/
20170108030212
/
files
nightly linux64
4ece183563a4
/
53.0a1
/
20170108030212
/
files
nightly mac
4ece183563a4
/
53.0a1
/
20170108030212
/
files
nightly win32
4ece183563a4
/
53.0a1
/
20170108030212
/
files
nightly win64
4ece183563a4
/
53.0a1
/
20170108030212
/
files
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
releases | nightly linux32
53.0a1
/
20170108030212
/
pushlog to previous
nightly linux64
53.0a1
/
20170108030212
/
pushlog to previous
nightly mac
53.0a1
/
20170108030212
/
pushlog to previous
nightly win32
53.0a1
/
20170108030212
/
pushlog to previous
nightly win64
53.0a1
/
20170108030212
/
pushlog to previous
|
--- a/gfx/layers/ipc/CompositorBridgeParent.cpp +++ b/gfx/layers/ipc/CompositorBridgeParent.cpp @@ -865,17 +865,17 @@ CompositorBridgeParent::SetShadowPropert layerCompositor->SetShadowOpacitySetByAnimation(false); } ); } void CompositorBridgeParent::CompositeToTarget(DrawTarget* aTarget, const gfx::IntRect* aRect) { - profiler_tracing("Paint", "Composite", TRACING_INTERVAL_START); + GeckoProfilerTracingRAII tracer("Paint", "Composite"); PROFILER_LABEL("CompositorBridgeParent", "Composite", js::ProfileEntry::Category::GRAPHICS); MOZ_ASSERT(CompositorThreadHolder::IsInCompositorThread(), "Composite can only be called on the compositor thread"); TimeStamp start = TimeStamp::Now(); #ifdef COMPOSITOR_PERFORMANCE_WARNING @@ -1006,17 +1006,16 @@ CompositorBridgeParent::CompositeToTarge if (gfxPrefs::LayersCompositionFrameRate() == 0 || mLayerManager->GetCompositor()->GetDiagnosticTypes() & DiagnosticTypes::FLASH_BORDERS) { // Special full-tilt composite mode for performance testing ScheduleComposition(); } mCompositor->SetCompositionTime(TimeStamp()); mozilla::Telemetry::AccumulateTimeDelta(mozilla::Telemetry::COMPOSITE_TIME, start); - profiler_tracing("Paint", "Composite", TRACING_INTERVAL_END); } mozilla::ipc::IPCResult CompositorBridgeParent::RecvRemotePluginsReady() { #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) mWaitForPluginsUntil = TimeStamp(); if (mHaveBlockedForPlugins) {
--- a/gfx/layers/ipc/LayerTransactionParent.cpp +++ b/gfx/layers/ipc/LayerTransactionParent.cpp @@ -129,17 +129,17 @@ LayerTransactionParent::RecvPaintTime(co mCompositorBridge->UpdatePaintTime(this, aPaintTime); return IPC_OK(); } mozilla::ipc::IPCResult LayerTransactionParent::RecvUpdate(const TransactionInfo& aInfo, InfallibleTArray<EditReply>* reply) { - profiler_tracing("Paint", "LayerTransaction", TRACING_INTERVAL_START); + GeckoProfilerTracingRAII tracer("Paint", "LayerTransaction"); PROFILER_LABEL("LayerTransactionParent", "RecvUpdate", js::ProfileEntry::Category::GRAPHICS); #ifdef COMPOSITOR_PERFORMANCE_WARNING TimeStamp updateStart = TimeStamp::Now(); #endif MOZ_LAYERS_LOG(("[ParentSide] received txn with %d edits", aInfo.cset().Length())); @@ -649,17 +649,16 @@ LayerTransactionParent::RecvUpdate(const } mLayerManager->VisualFrameWarning(severity); PR_LogPrint("LayerTransactionParent::RecvUpdate transaction from process %d took %f ms", OtherPid(), latency.ToMilliseconds()); } } - profiler_tracing("Paint", "LayerTransaction", TRACING_INTERVAL_END); return IPC_OK(); } mozilla::ipc::IPCResult LayerTransactionParent::RecvSetLayerObserverEpoch(const uint64_t& aLayerObserverEpoch) { mChildEpoch = aLayerObserverEpoch; return IPC_OK();
--- a/ipc/ipdl/ipdl/lower.py +++ b/ipc/ipdl/ipdl/lower.py @@ -4452,22 +4452,28 @@ class _GenerateProtocolActorCode(ipdl.as sendok = ExprVar('sendok__') return ( sendok, ([ Whitespace.NL, self.logMessage(md, msgexpr, 'Sending ', actor), self.profilerLabel(md) ] + self.transition(md, actor) + [ Whitespace.NL, - StmtDecl( - Decl(Type.BOOL, sendok.name), - init=ExprCall(ExprSelect(self.protocol.callGetChannel(actor), - '->', - _sendPrefix(md.decl.type)), - args=[ msgexpr, ExprAddrOf(replyexpr) ])) + StmtDecl(Decl(Type.BOOL, sendok.name)), + StmtBlock([ + StmtDecl(Decl(Type('GeckoProfilerTracingRAII'), + 'syncIPCTracer'), + initargs=[ ExprLiteral.String("IPC"), + ExprLiteral.String(self.protocol.name + "::" + md.prettyMsgName()) ]), + StmtExpr(ExprAssn(sendok, + ExprCall(ExprSelect(self.protocol.callGetChannel(actor), + '->', + _sendPrefix(md.decl.type)), + args=[ msgexpr, ExprAddrOf(replyexpr) ]))), + ]) ]) ) def callAllocActor(self, md, retsems, side): return ExprCall( _allocMethod(md.decl.type.constructedType(), side), args=md.makeCxxArgs(retsems=retsems, retcallsems='out', implicit=0))
--- a/layout/base/nsRefreshDriver.cpp +++ b/layout/base/nsRefreshDriver.cpp @@ -306,22 +306,21 @@ protected: ScheduleNextTick(now); mLastFireEpoch = jsnow; mLastFireTime = now; mLastFireSkipped = false; LOG("[%p] ticking drivers...", this); // RD is short for RefreshDriver - profiler_tracing("Paint", "RD", TRACING_INTERVAL_START); + GeckoProfilerTracingRAII tracer("Paint", "RD"); TickRefreshDrivers(jsnow, now, mContentRefreshDrivers); TickRefreshDrivers(jsnow, now, mRootRefreshDrivers); - profiler_tracing("Paint", "RD", TRACING_INTERVAL_END); LOG("[%p] done.", this); } static void TickDriver(nsRefreshDriver* driver, int64_t jsnow, TimeStamp now) { LOG(">> TickDriver: %p (jsnow: %lld)", driver, jsnow); driver->Tick(jsnow, now); } @@ -1677,17 +1676,17 @@ nsRefreshDriver::RunFrameRequestCallback for (nsIDocument* doc : mFrameRequestCallbackDocs) { TakeFrameRequestCallbacksFrom(doc, frameRequestCallbacks); } // Reset mFrameRequestCallbackDocs so they can be readded as needed. mFrameRequestCallbackDocs.Clear(); if (!frameRequestCallbacks.IsEmpty()) { - profiler_tracing("Paint", "Scripts", TRACING_INTERVAL_START); + GeckoProfilerTracingRAII tracer("Paint", "Scripts"); for (const DocumentFrameCallbacks& docCallbacks : frameRequestCallbacks) { // XXXbz Bug 863140: GetInnerWindow can return the outer // window in some cases. nsPIDOMWindowInner* innerWindow = docCallbacks.mDocument->GetInnerWindow(); DOMHighResTimeStamp timeStamp = 0; if (innerWindow && innerWindow->IsInnerWindow()) { mozilla::dom::Performance* perf = innerWindow->GetPerformance(); @@ -1695,17 +1694,16 @@ nsRefreshDriver::RunFrameRequestCallback timeStamp = perf->GetDOMTiming()->TimeStampToDOMHighRes(aNowTime); } // else window is partially torn down already } for (auto& callback : docCallbacks.mCallbacks) { callback->Call(timeStamp); } } - profiler_tracing("Paint", "Scripts", TRACING_INTERVAL_END); } } void nsRefreshDriver::Tick(int64_t aNowEpoch, TimeStamp aNowTime) { NS_PRECONDITION(!nsContentUtils::GetCurrentJSContext(), "Shouldn't have a JSContext on the stack"); @@ -1806,30 +1804,29 @@ nsRefreshDriver::Tick(int64_t aNowEpoch, if (i == 0) { // This is the FlushType::Style case. DispatchAnimationEvents(); DispatchPendingEvents(); RunFrameRequestCallbacks(aNowTime); if (mPresContext && mPresContext->GetPresShell()) { - bool tracingStyleFlush = false; + Maybe<GeckoProfilerTracingRAII> tracingStyleFlush; AutoTArray<nsIPresShell*, 16> observers; observers.AppendElements(mStyleFlushObservers); for (uint32_t j = observers.Length(); j && mPresContext && mPresContext->GetPresShell(); --j) { // Make sure to not process observers which might have been removed // during previous iterations. nsIPresShell* shell = observers[j - 1]; if (!mStyleFlushObservers.Contains(shell)) continue; if (!tracingStyleFlush) { - tracingStyleFlush = true; - profiler_tracing("Paint", "Styles", Move(mStyleCause), TRACING_INTERVAL_START); + tracingStyleFlush.emplace("Paint", "Styles", Move(mStyleCause)); mStyleCause = nullptr; } nsCOMPtr<nsIPresShell> shellKungFuDeathGrip(shell); mStyleFlushObservers.RemoveElement(shell); RestyleManagerHandle restyleManager = shell->GetPresContext()->RestyleManager(); restyleManager->SetObservingRefreshDriver(false); @@ -1838,38 +1835,32 @@ nsRefreshDriver::Tick(int64_t aNowEpoch, // ready promise if it needs to (though it might still be waiting on // a layout flush). nsPresContext* presContext = shell->GetPresContext(); if (presContext) { presContext->NotifyFontFaceSetOnRefresh(); } mNeedToRecomputeVisibility = true; } - - - if (tracingStyleFlush) { - profiler_tracing("Paint", "Styles", TRACING_INTERVAL_END); - } } } else if (i == 1) { // This is the FlushType::Layout case. - bool tracingLayoutFlush = false; + Maybe<GeckoProfilerTracingRAII> tracingLayoutFlush; AutoTArray<nsIPresShell*, 16> observers; observers.AppendElements(mLayoutFlushObservers); for (uint32_t j = observers.Length(); j && mPresContext && mPresContext->GetPresShell(); --j) { // Make sure to not process observers which might have been removed // during previous iterations. nsIPresShell* shell = observers[j - 1]; if (!mLayoutFlushObservers.Contains(shell)) continue; if (!tracingLayoutFlush) { - tracingLayoutFlush = true; - profiler_tracing("Paint", "Reflow", Move(mReflowCause), TRACING_INTERVAL_START); + tracingLayoutFlush.emplace("Paint", "Reflow"); mReflowCause = nullptr; } nsCOMPtr<nsIPresShell> shellKungFuDeathGrip(shell); mLayoutFlushObservers.RemoveElement(shell); shell->mReflowScheduled = false; shell->mSuppressInterruptibleReflows = false; FlushType flushType = HasPendingAnimations(shell) @@ -1879,20 +1870,16 @@ nsRefreshDriver::Tick(int64_t aNowEpoch, // Inform the FontFaceSet that we ticked, so that it can resolve its // ready promise if it needs to. nsPresContext* presContext = shell->GetPresContext(); if (presContext) { presContext->NotifyFontFaceSetOnRefresh(); } mNeedToRecomputeVisibility = true; } - - if (tracingLayoutFlush) { - profiler_tracing("Paint", "Reflow", TRACING_INTERVAL_END); - } } // The pres context may be destroyed during we do the flushing. if (!mPresContext || !mPresContext->GetPresShell()) { StopTimer(); return; } } @@ -2099,19 +2086,18 @@ nsRefreshDriver::Thaw() void nsRefreshDriver::FinishedWaitingForTransaction() { mWaitingForTransaction = false; if (mSkippedPaints && !IsInRefresh() && (ObserverCount() || ImageRequestCount())) { - profiler_tracing("Paint", "RD", TRACING_INTERVAL_START); + GeckoProfilerTracingRAII tracer("Paint", "RD"); DoRefresh(); - profiler_tracing("Paint", "RD", TRACING_INTERVAL_END); } mSkippedPaints = false; mWarningThreshold = 1; } uint64_t nsRefreshDriver::GetTransactionId() {
--- a/tools/profiler/public/GeckoProfilerImpl.h +++ b/tools/profiler/public/GeckoProfilerImpl.h @@ -389,16 +389,24 @@ public: MOZ_GUARD_OBJECT_NOTIFIER_PARAM) : mCategory(aCategory) , mInfo(aInfo) { MOZ_GUARD_OBJECT_NOTIFIER_INIT; profiler_tracing(mCategory, mInfo, Move(aBacktrace), TRACING_INTERVAL_START); } + GeckoProfilerTracingRAII(const char* aCategory, const char* aInfo + MOZ_GUARD_OBJECT_NOTIFIER_PARAM) + : mCategory(aCategory) + , mInfo(aInfo) + { + MOZ_GUARD_OBJECT_NOTIFIER_INIT; + } + ~GeckoProfilerTracingRAII() { profiler_tracing(mCategory, mInfo, TRACING_INTERVAL_END); } protected: MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER const char* mCategory; const char* mInfo;
--- a/view/nsViewManager.cpp +++ b/view/nsViewManager.cpp @@ -400,28 +400,27 @@ nsViewManager::ProcessPendingUpdatesForV if (view) { view->ResetWidgetBounds(false, true); } } if (rootShell->GetViewManager() != this) { return; // presentation might have been torn down } if (aFlushDirtyRegion) { - profiler_tracing("Paint", "DisplayList", TRACING_INTERVAL_START); + GeckoProfilerTracingRAII tracer("Paint", "DisplayList"); nsAutoScriptBlocker scriptBlocker; SetPainting(true); for (uint32_t i = 0; i < widgets.Length(); ++i) { nsIWidget* widget = widgets[i]; nsView* view = nsView::GetViewFor(widget); if (view) { view->GetViewManager()->ProcessPendingUpdatesPaint(widget); } } SetPainting(false); - profiler_tracing("Paint", "DisplayList", TRACING_INTERVAL_END); } } void nsViewManager::ProcessPendingUpdatesRecurse(nsView* aView, nsTArray<nsCOMPtr<nsIWidget> >& aWidgets) { if (mPresShell && mPresShell->IsNeverPainting()) {