| Index: apps/benchmark/measurements.cc
|
| diff --git a/apps/benchmark/measurements.cc b/apps/benchmark/measurements.cc
|
| index 59014b1313ac4571089b4c8e10be50a476851d70..96be8bfcb031f90cc8f618d315dfa9d7583bc282 100644
|
| --- a/apps/benchmark/measurements.cc
|
| +++ b/apps/benchmark/measurements.cc
|
| @@ -22,10 +22,13 @@ EventSpec::~EventSpec() {}
|
|
|
| Measurement::Measurement() {}
|
|
|
| +Measurement::Measurement(MeasurementType type, EventSpec target_event)
|
| + : type(type), target_event(target_event) {}
|
| +
|
| Measurement::Measurement(MeasurementType type,
|
| - std::string target_name,
|
| - std::string target_categories)
|
| - : type(type), target_event(target_name, target_categories) {}
|
| + EventSpec target_event,
|
| + EventSpec second_event)
|
| + : type(type), target_event(target_event), second_event(second_event) {}
|
|
|
| Measurement::~Measurement() {}
|
|
|
| @@ -39,6 +42,8 @@ double Measurements::Measure(const Measurement& measurement) {
|
| switch (measurement.type) {
|
| case MeasurementType::TIME_UNTIL:
|
| return TimeUntil(measurement.target_event);
|
| + case MeasurementType::TIME_BETWEEN:
|
| + return TimeBetween(measurement.target_event, measurement.second_event);
|
| case MeasurementType::AVG_DURATION:
|
| return AvgDuration(measurement.target_event);
|
| default:
|
| @@ -47,25 +52,47 @@ double Measurements::Measure(const Measurement& measurement) {
|
| }
|
| }
|
|
|
| -double Measurements::TimeUntil(const EventSpec& event_spec) {
|
| - base::TimeTicks earliest;
|
| +bool Measurements::EarliestOccurence(const EventSpec& event_spec,
|
| + base::TimeTicks* earliest) {
|
| + base::TimeTicks result;
|
| bool found = false;
|
| for (const Event& event : events_) {
|
| if (!Match(event, event_spec))
|
| continue;
|
|
|
| if (found) {
|
| - earliest = std::min(earliest, event.timestamp);
|
| + result = std::min(result, event.timestamp);
|
| } else {
|
| - earliest = event.timestamp;
|
| + result = event.timestamp;
|
| found = true;
|
| }
|
| }
|
| if (!found)
|
| + return false;
|
| + *earliest = result;
|
| + return true;
|
| +}
|
| +
|
| +double Measurements::TimeUntil(const EventSpec& event_spec) {
|
| + base::TimeTicks earliest;
|
| + if (!EarliestOccurence(event_spec, &earliest))
|
| return -1.0;
|
| return (earliest - time_origin_).InMillisecondsF();
|
| }
|
|
|
| +double Measurements::TimeBetween(const EventSpec& first_event_spec,
|
| + const EventSpec& second_event_spec) {
|
| + base::TimeTicks earliest_first_event;
|
| + if (!EarliestOccurence(first_event_spec, &earliest_first_event))
|
| + return -1.0;
|
| + base::TimeTicks earliest_second_event;
|
| + if (!EarliestOccurence(second_event_spec, &earliest_second_event))
|
| + return -1.0;
|
| + if (earliest_second_event < earliest_first_event)
|
| + return -1.0;
|
| + return (earliest_second_event - earliest_first_event).InMillisecondsF();
|
| +}
|
| +
|
| double Measurements::AvgDuration(const EventSpec& event_spec) {
|
| double sum = 0.0;
|
| int count = 0;
|
|
|