author | Tom Tromey <tromey@mozilla.com> |
Fri, 27 Mar 2015 08:42:00 -0400 | |
changeset 236162 | d8a86f570ca973f53495042a46ae988e186d8b1c |
parent 236161 | 0af707c2229d33fab75b926700b08e5145f8714d |
child 236163 | 29d74068461390bb18611efd4385e73db5907125 |
push id | 28490 |
push user | kwierso@gmail.com |
push date | Fri, 27 Mar 2015 23:52:50 +0000 |
treeherder | mozilla-central@5bc74f6fa5c8 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | smaug, fitzgen |
bugs | 1144820 |
milestone | 39.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/docshell/base/TimelineMarker.h +++ b/docshell/base/TimelineMarker.h @@ -28,19 +28,19 @@ public: TracingMetadata aMetaData, const nsAString& aCause); virtual ~TimelineMarker(); // Check whether two markers should be considered the same, // for the purpose of pairing start and end markers. Normally // this definition suffices. - virtual bool Equals(const TimelineMarker* aOther) + virtual bool Equals(const TimelineMarker& aOther) { - return strcmp(mName, aOther->mName) == 0; + return strcmp(mName, aOther.mName) == 0; } // Add details specific to this marker type to aMarker. The // standard elements have already been set. This method is // called on both the starting and ending markers of a pair. // Ordinarily the ending marker doesn't need to do anything // here. virtual void AddDetails(mozilla::dom::ProfileTimelineMarker& aMarker) {}
--- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -2972,20 +2972,20 @@ nsDocShell::PopProfileTimelineMarkers( nsTArray<mozilla::dom::ProfileTimelineMarker> profileTimelineMarkers; SequenceRooter<mozilla::dom::ProfileTimelineMarker> rooter( aCx, &profileTimelineMarkers); // If we see an unpaired START, we keep it around for the next call // to PopProfileTimelineMarkers. We store the kept START objects in // this array. - nsTArray<TimelineMarker*> keptMarkers; + nsTArray<UniquePtr<TimelineMarker>> keptMarkers; for (uint32_t i = 0; i < mProfileTimelineMarkers.Length(); ++i) { - TimelineMarker* startPayload = mProfileTimelineMarkers[i]; + UniquePtr<TimelineMarker>& startPayload = mProfileTimelineMarkers[i]; const char* startMarkerName = startPayload->GetName(); bool hasSeenPaintedLayer = false; bool isPaint = strcmp(startMarkerName, "Paint") == 0; // If we are processing a Paint marker, we append information from // all the embedded Layer markers to this array. dom::Sequence<dom::ProfileTimelineLayerRect> layerRectangles; @@ -2997,26 +2997,26 @@ nsDocShell::PopProfileTimelineMarkers( // for the matching end. It doesn't hurt to apply this logic to // all event types. uint32_t markerDepth = 0; // The assumption is that the devtools timeline flushes markers frequently // enough for the amount of markers to always be small enough that the // nested for loop isn't going to be a performance problem. for (uint32_t j = i + 1; j < mProfileTimelineMarkers.Length(); ++j) { - TimelineMarker* endPayload = mProfileTimelineMarkers[j]; + UniquePtr<TimelineMarker>& endPayload = mProfileTimelineMarkers[j]; const char* endMarkerName = endPayload->GetName(); // Look for Layer markers to stream out paint markers. if (isPaint && strcmp(endMarkerName, "Layer") == 0) { hasSeenPaintedLayer = true; endPayload->AddLayerRectangles(layerRectangles); } - if (!startPayload->Equals(endPayload)) { + if (!startPayload->Equals(*endPayload)) { continue; } // Pair start and end markers. if (endPayload->GetMetaData() == TRACING_INTERVAL_START) { ++markerDepth; } else if (endPayload->GetMetaData() == TRACING_INTERVAL_END) { if (markerDepth > 0) { @@ -3043,24 +3043,23 @@ nsDocShell::PopProfileTimelineMarkers( break; } } } // If we did not see the corresponding END, keep the START. if (!hasSeenEnd) { - keptMarkers.AppendElement(mProfileTimelineMarkers[i]); + keptMarkers.AppendElement(Move(mProfileTimelineMarkers[i])); mProfileTimelineMarkers.RemoveElementAt(i); --i; } } } - ClearProfileTimelineMarkers(); mProfileTimelineMarkers.SwapElements(keptMarkers); if (!ToJSValue(aCx, profileTimelineMarkers, aProfileTimelineMarkers)) { JS_ClearPendingException(aCx); return NS_ERROR_UNEXPECTED; } return NS_OK; @@ -3084,17 +3083,17 @@ nsDocShell::AddProfileTimelineMarker(con mProfileTimelineMarkers.AppendElement(marker); } } void nsDocShell::AddProfileTimelineMarker(UniquePtr<TimelineMarker>&& aMarker) { if (mProfileTimelineRecording) { - mProfileTimelineMarkers.AppendElement(aMarker.release()); + mProfileTimelineMarkers.AppendElement(Move(aMarker)); } } NS_IMETHODIMP nsDocShell::SetWindowDraggingAllowed(bool aValue) { nsRefPtr<nsDocShell> parent = GetParentDocshell(); if (!aValue && mItemType == typeChrome && !parent) { @@ -3120,19 +3119,16 @@ nsDocShell::GetWindowDraggingAllowed(boo *aValue = mWindowDraggingAllowed; } return NS_OK; } void nsDocShell::ClearProfileTimelineMarkers() { - for (uint32_t i = 0; i < mProfileTimelineMarkers.Length(); ++i) { - delete mProfileTimelineMarkers[i]; - } mProfileTimelineMarkers.Clear(); } nsIDOMStorageManager* nsDocShell::TopSessionStorageManager() { nsresult rv;
--- a/docshell/base/nsDocShell.h +++ b/docshell/base/nsDocShell.h @@ -979,17 +979,17 @@ private: // A depth count of how many times NotifyRunToCompletionStart // has been called without a matching NotifyRunToCompletionStop. uint32_t mJSRunToCompletionDepth; // True if recording profiles. bool mProfileTimelineRecording; - nsTArray<TimelineMarker*> mProfileTimelineMarkers; + nsTArray<mozilla::UniquePtr<TimelineMarker>> mProfileTimelineMarkers; // Get rid of all the timeline markers accumulated so far void ClearProfileTimelineMarkers(); // Separate function to do the actual name (i.e. not _top, _self etc.) // searching for FindItemWithName. nsresult DoFindItemWithName(const char16_t* aName, nsISupports* aRequestor,
--- a/dom/base/Console.cpp +++ b/dom/base/Console.cpp @@ -929,23 +929,23 @@ public: const nsAString& aCause) : TimelineMarker(aDocShell, "ConsoleTime", aMetaData, aCause) { if (aMetaData == TRACING_INTERVAL_END) { CaptureStack(); } } - virtual bool Equals(const TimelineMarker* aOther) override + virtual bool Equals(const TimelineMarker& aOther) override { if (!TimelineMarker::Equals(aOther)) { return false; } // Console markers must have matching causes as well. - return GetCause() == aOther->GetCause(); + return GetCause() == aOther.GetCause(); } virtual void AddDetails(mozilla::dom::ProfileTimelineMarker& aMarker) override { if (GetMetaData() == TRACING_INTERVAL_START) { aMarker.mCauseName.Construct(GetCause()); } else { aMarker.mEndStack = GetStack();