Bug 970494 - Markers should be time based and not sample based. r=bgirard

--HG--
extra : rebase_source : c1e3e77fa8f7ad2c5eec7f092d96bf3719db3a8c
This commit is contained in:
Viktor Stanchev 2014-02-13 13:43:48 -05:00
parent 18aeb9dd4e
commit cc4777dcd4
3 changed files with 22 additions and 15 deletions

View File

@ -340,9 +340,11 @@ void ThreadProfile::BuildJSObject(Builder& b,
typename Builder::RootedArray samples(b.context(), b.CreateArray());
b.DefineProperty(profile, "samples", samples);
typename Builder::RootedArray markers(b.context(), b.CreateArray());
b.DefineProperty(profile, "markers", markers);
typename Builder::RootedObject sample(b.context());
typename Builder::RootedArray frames(b.context());
typename Builder::RootedArray markers(b.context());
int readPos = mReadPos;
while (readPos != mLastFlushPos) {
@ -365,13 +367,7 @@ void ThreadProfile::BuildJSObject(Builder& b,
switch (entry.mTagName) {
case 'm':
{
if (sample) {
if (!markers) {
markers = b.CreateArray();
b.DefineProperty(sample, "marker", markers);
}
entry.getMarker()->BuildJSObject(b, markers);
}
entry.getMarker()->BuildJSObject(b, markers);
}
break;
case 'r':
@ -408,8 +404,6 @@ void ThreadProfile::BuildJSObject(Builder& b,
frames = b.CreateArray();
b.DefineProperty(sample, "frames", frames);
b.ArrayPush(samples, sample);
// Created lazily
markers = nullptr;
// Fall though to create a label for the 's' tag
case 'c':
case 'l':

View File

@ -111,7 +111,8 @@ class ProfilerMarker {
friend class ProfilerLinkedList<ProfilerMarker>;
public:
ProfilerMarker(const char* aMarkerName,
ProfilerMarkerPayload* aPayload = nullptr);
ProfilerMarkerPayload* aPayload = nullptr,
float aTime = 0);
~ProfilerMarker();
@ -128,10 +129,13 @@ public:
return mGenID + 2 <= aGenID;
}
float GetTime();
private:
char* mMarkerName;
ProfilerMarkerPayload* mPayload;
ProfilerMarker* mNext;
float mTime;
int mGenID;
};
@ -320,9 +324,9 @@ public:
return mPendingUWTBuffers.getLinkedUWTBuffers();
}
void addMarker(const char *aMarkerStr, ProfilerMarkerPayload *aPayload)
void addMarker(const char *aMarkerStr, ProfilerMarkerPayload *aPayload, float aTime)
{
ProfilerMarker* marker = new ProfilerMarker(aMarkerStr, aPayload);
ProfilerMarker* marker = new ProfilerMarker(aMarkerStr, aPayload, aTime);
mPendingMarkers.addMarker(marker);
}

View File

@ -111,8 +111,10 @@ ThreadInfo::~ThreadInfo() {
}
ProfilerMarker::ProfilerMarker(const char* aMarkerName,
ProfilerMarkerPayload* aPayload)
ProfilerMarkerPayload* aPayload,
float aTime)
: mMarkerName(strdup(aMarkerName))
, mTime(aTime)
, mPayload(aPayload)
{
}
@ -127,6 +129,11 @@ ProfilerMarker::SetGeneration(int aGenID) {
mGenID = aGenID;
}
float
ProfilerMarker::GetTime() {
return mTime;
}
template<typename Builder> void
ProfilerMarker::BuildJSObject(Builder& b, typename Builder::ArrayHandle markers) const {
typename Builder::RootedObject marker(b.context(), b.CreateObject());
@ -139,6 +146,7 @@ ProfilerMarker::BuildJSObject(Builder& b, typename Builder::ArrayHandle markers)
mPayload->PreparePayload(b));
b.DefineProperty(marker, "data", markerData);
}
b.DefineProperty(marker, "time", mTime);
b.ArrayPush(markers, marker);
}
@ -896,7 +904,8 @@ void mozilla_sampler_add_marker(const char *aMarker, ProfilerMarkerPayload *aPay
if (!stack) {
return;
}
stack->addMarker(aMarker, payload.forget());
TimeDuration delta = TimeStamp::Now() - sStartTime;
stack->addMarker(aMarker, payload.forget(), static_cast<float>(delta.ToMilliseconds()));
}
// END externally visible functions