1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
cc / metrics / frame_info_unittest.cc [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "cc/metrics/frame_info.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace cc {
namespace {
using FrameFinalState = FrameInfo::FrameFinalState;
using MainThreadResponse = FrameInfo::MainThreadResponse;
using SmoothThread = FrameInfo::SmoothThread;
TEST(FrameInfoTest, WasMainUpdateDroppedForkedReporters) {
FrameInfo main, compositor;
main.smooth_thread = SmoothThread::kSmoothBoth;
compositor.smooth_thread = SmoothThread::kSmoothCompositor;
main.main_thread_response = MainThreadResponse::kIncluded;
compositor.main_thread_response = MainThreadResponse::kMissing;
// For a 'forked' frame: the compositor-update is dropped, and the main-thread
// update was presented. For this frame, both the compositor-thread and the
// main-thread update are considered dropped (because the compositor-thread
// did not update any new main-thread).
main.final_state = FrameFinalState::kPresentedAll;
compositor.final_state = FrameFinalState::kDropped;
auto test = main;
test.MergeWith(compositor);
EXPECT_TRUE(test.WasSmoothMainUpdateDropped());
EXPECT_TRUE(test.WasSmoothCompositorUpdateDropped());
// Even if the compositor-thread update is presented, the overall main-thread
// update is dropped if the compositor-update is not accompanied by new
// main-thread update (from earlier frames).
compositor.final_state = FrameFinalState::kPresentedPartialOldMain;
test = main;
test.MergeWith(compositor);
EXPECT_TRUE(test.WasSmoothMainUpdateDropped());
EXPECT_FALSE(test.WasSmoothCompositorUpdateDropped());
// If the compositor-thread is accompanied by new main-thread update (even if
// from earlier frames), then the main-thread is update is considered not
// dropped.
compositor.final_state = FrameFinalState::kPresentedPartialNewMain;
test = main;
test.MergeWith(compositor);
EXPECT_FALSE(test.WasSmoothMainUpdateDropped());
EXPECT_FALSE(test.WasSmoothCompositorUpdateDropped());
}
} // namespace
} // namespace cc