gecko-dev/toolkit/components/startup/StartupTimeline.cpp
Vanessa Gutierrez 1d300dacd5 Bug 1386186 - Added firstPaint scalar, timestamps scalar section, and tests. r=gfritzsche
--HG--
extra : amend_source : eb7102df741b51926407fd7e7f16e3f36a7d6b19
2017-08-22 11:01:00 -04:00

55 lines
1.6 KiB
C++

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "StartupTimeline.h"
#include "mozilla/Telemetry.h"
#include "mozilla/TimeStamp.h"
#include "nsXULAppAPI.h"
namespace mozilla {
TimeStamp StartupTimeline::sStartupTimeline[StartupTimeline::MAX_EVENT_ID];
const char *StartupTimeline::sStartupTimelineDesc[StartupTimeline::MAX_EVENT_ID] = {
#define mozilla_StartupTimeline_Event(ev, desc) desc,
#include "StartupTimeline.h"
#undef mozilla_StartupTimeline_Event
};
} /* namespace mozilla */
using mozilla::StartupTimeline;
using mozilla::TimeStamp;
/**
* The XRE_StartupTimeline_Record function is to be used by embedding
* applications that can't use mozilla::StartupTimeline::Record() directly.
*
* @param aEvent The event to be recorded, must correspond to an element of the
* mozilla::StartupTimeline::Event enumartion
* @param aWhen The time at which the event happened
*/
void
XRE_StartupTimelineRecord(int aEvent, TimeStamp aWhen)
{
StartupTimeline::Record((StartupTimeline::Event)aEvent, aWhen);
}
void StartupTimeline::RecordOnce(Event ev) {
if (HasRecord(ev)) {
return;
}
Record(ev);
// Record first paint timestamp as a scalar.
if (ev == FIRST_PAINT) {
bool error = false;
uint32_t firstPaintTime = (uint32_t) (Get(ev) - TimeStamp::ProcessCreation(&error)).ToMilliseconds();
if (!error) {
Telemetry::ScalarSet(Telemetry::ScalarID::TIMESTAMPS_FIRST_PAINT, firstPaintTime);
}
}
}