Commit 8461d62c authored by Mohsen Izadi's avatar Mohsen Izadi Committed by Commit Bot

Use mockable time in CompositorFrameReportingController

This CL adds the possibility to inject a base::TickClock* into
CompositorFrameReportingController, so its timing can be mocked by
tests. CompositorFrameReportingControllerTest is also updated to make
use of this.

Bug: 1054009,1057193
Change-Id: I6ece91efe32395a37c14cd4ca4c59da9f2e05da0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2159894Reviewed-by: default avatarSadrul Chowdhury <sadrul@chromium.org>
Commit-Queue: Mohsen Izadi <mohsen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#762104}
parent 247cab06
...@@ -49,7 +49,7 @@ CompositorFrameReportingController::SubmittedCompositorFrame:: ...@@ -49,7 +49,7 @@ CompositorFrameReportingController::SubmittedCompositorFrame::
SubmittedCompositorFrame(SubmittedCompositorFrame&& other) = default; SubmittedCompositorFrame(SubmittedCompositorFrame&& other) = default;
base::TimeTicks CompositorFrameReportingController::Now() const { base::TimeTicks CompositorFrameReportingController::Now() const {
return base::TimeTicks::Now(); return tick_clock_->NowTicks();
} }
bool CompositorFrameReportingController::HasReporterAt( bool CompositorFrameReportingController::HasReporterAt(
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <memory> #include <memory>
#include <vector> #include <vector>
#include "base/time/default_tick_clock.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "cc/cc_export.h" #include "cc/cc_export.h"
#include "cc/metrics/compositor_frame_reporter.h" #include "cc/metrics/compositor_frame_reporter.h"
...@@ -77,6 +78,10 @@ class CC_EXPORT CompositorFrameReportingController { ...@@ -77,6 +78,10 @@ class CC_EXPORT CompositorFrameReportingController {
virtual void AddActiveTracker(FrameSequenceTrackerType type); virtual void AddActiveTracker(FrameSequenceTrackerType type);
virtual void RemoveActiveTracker(FrameSequenceTrackerType type); virtual void RemoveActiveTracker(FrameSequenceTrackerType type);
void set_tick_clock(const base::TickClock* tick_clock) {
tick_clock_ = tick_clock;
}
std::unique_ptr<CompositorFrameReporter>* reporters() { return reporters_; } std::unique_ptr<CompositorFrameReporter>* reporters() { return reporters_; }
protected: protected:
...@@ -120,6 +125,8 @@ class CC_EXPORT CompositorFrameReportingController { ...@@ -120,6 +125,8 @@ class CC_EXPORT CompositorFrameReportingController {
// DO NOT reorder this line and the one above. The latency_ukm_reporter_ must // DO NOT reorder this line and the one above. The latency_ukm_reporter_ must
// outlive the objects in |submitted_compositor_frames_|. // outlive the objects in |submitted_compositor_frames_|.
base::circular_deque<SubmittedCompositorFrame> submitted_compositor_frames_; base::circular_deque<SubmittedCompositorFrame> submitted_compositor_frames_;
const base::TickClock* tick_clock_ = base::DefaultTickClock::GetInstance();
}; };
} // namespace cc } // namespace cc
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/strings/strcat.h" #include "base/strings/strcat.h"
#include "base/test/metrics/histogram_tester.h" #include "base/test/metrics/histogram_tester.h"
#include "base/test/simple_test_tick_clock.h"
#include "cc/input/scroll_input_type.h" #include "cc/input/scroll_input_type.h"
#include "cc/metrics/event_metrics.h" #include "cc/metrics/event_metrics.h"
#include "components/viz/common/frame_timing_details.h" #include "components/viz/common/frame_timing_details.h"
...@@ -56,6 +57,8 @@ class TestCompositorFrameReportingController ...@@ -56,6 +57,8 @@ class TestCompositorFrameReportingController
class CompositorFrameReportingControllerTest : public testing::Test { class CompositorFrameReportingControllerTest : public testing::Test {
public: public:
CompositorFrameReportingControllerTest() : current_id_(1, 1) { CompositorFrameReportingControllerTest() : current_id_(1, 1) {
test_tick_clock_.SetNowTicks(base::TimeTicks::Now());
reporting_controller_.set_tick_clock(&test_tick_clock_);
args_ = SimulateBeginFrameArgs(current_id_); args_ = SimulateBeginFrameArgs(current_id_);
} }
...@@ -137,20 +140,21 @@ class CompositorFrameReportingControllerTest : public testing::Test { ...@@ -137,20 +140,21 @@ class CompositorFrameReportingControllerTest : public testing::Test {
} }
base::TimeTicks AdvanceNowByMs(int64_t advance_ms) { base::TimeTicks AdvanceNowByMs(int64_t advance_ms) {
now_ += base::TimeDelta::FromMicroseconds(advance_ms); test_tick_clock_.Advance(base::TimeDelta::FromMicroseconds(advance_ms));
return now_; return test_tick_clock_.NowTicks();
} }
protected: protected:
// This should be defined before |reporting_controller_| so it is created
// before and destroyed after that.
base::SimpleTestTickClock test_tick_clock_;
TestCompositorFrameReportingController reporting_controller_; TestCompositorFrameReportingController reporting_controller_;
viz::BeginFrameArgs args_; viz::BeginFrameArgs args_;
viz::BeginFrameId current_id_; viz::BeginFrameId current_id_;
viz::BeginFrameId last_activated_id_; viz::BeginFrameId last_activated_id_;
base::TimeTicks begin_main_start_; base::TimeTicks begin_main_start_;
viz::FrameTokenGenerator next_token_; viz::FrameTokenGenerator next_token_;
private:
base::TimeTicks now_ = base::TimeTicks::Now();
}; };
TEST_F(CompositorFrameReportingControllerTest, ActiveReporterCounts) { TEST_F(CompositorFrameReportingControllerTest, ActiveReporterCounts) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment