Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: content/common/inter_process_time_ticks_converter_unittest.cc

Issue 481443003: Add UMA histograms for the inter-process TimeTicks skew. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address Alexei's comments. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/common/inter_process_time_ticks_converter.h" 5 #include "content/common/inter_process_time_ticks_converter.h"
6 6
7 #include "base/time/time.h" 7 #include "base/time/time.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 using base::TimeTicks; 10 using base::TimeTicks;
11 11
12 namespace content { 12 namespace content {
13 13
14 namespace { 14 namespace {
15 15
16 struct TestParams { 16 struct TestParams {
17 int64 local_lower_bound; 17 int64 local_lower_bound;
18 int64 remote_lower_bound; 18 int64 remote_lower_bound;
19 int64 remote_upper_bound; 19 int64 remote_upper_bound;
20 int64 local_upper_bound; 20 int64 local_upper_bound;
21 int64 test_time; 21 int64 test_time;
22 int64 test_delta; 22 int64 test_delta;
23 }; 23 };
24 24
25 struct TestResults { 25 struct TestResults {
26 int64 result_time; 26 int64 result_time;
27 int32 result_delta; 27 int32 result_delta;
28 bool is_skew_additive;
29 int64 skew;
28 }; 30 };
29 31
30 TestResults RunTest(const TestParams& params) { 32 TestResults RunTest(const TestParams& params) {
31 TimeTicks local_lower_bound = TimeTicks::FromInternalValue( 33 TimeTicks local_lower_bound = TimeTicks::FromInternalValue(
32 params.local_lower_bound); 34 params.local_lower_bound);
33 TimeTicks local_upper_bound = TimeTicks::FromInternalValue( 35 TimeTicks local_upper_bound = TimeTicks::FromInternalValue(
34 params.local_upper_bound); 36 params.local_upper_bound);
35 TimeTicks remote_lower_bound = TimeTicks::FromInternalValue( 37 TimeTicks remote_lower_bound = TimeTicks::FromInternalValue(
36 params.remote_lower_bound); 38 params.remote_lower_bound);
37 TimeTicks remote_upper_bound = TimeTicks::FromInternalValue( 39 TimeTicks remote_upper_bound = TimeTicks::FromInternalValue(
38 params.remote_upper_bound); 40 params.remote_upper_bound);
39 TimeTicks test_time = TimeTicks::FromInternalValue(params.test_time); 41 TimeTicks test_time = TimeTicks::FromInternalValue(params.test_time);
40 42
41 InterProcessTimeTicksConverter converter( 43 InterProcessTimeTicksConverter converter(
42 LocalTimeTicks::FromTimeTicks(local_lower_bound), 44 LocalTimeTicks::FromTimeTicks(local_lower_bound),
43 LocalTimeTicks::FromTimeTicks(local_upper_bound), 45 LocalTimeTicks::FromTimeTicks(local_upper_bound),
44 RemoteTimeTicks::FromTimeTicks(remote_lower_bound), 46 RemoteTimeTicks::FromTimeTicks(remote_lower_bound),
45 RemoteTimeTicks::FromTimeTicks(remote_upper_bound)); 47 RemoteTimeTicks::FromTimeTicks(remote_upper_bound));
46 48
47 TestResults results; 49 TestResults results;
48 results.result_time = converter.ToLocalTimeTicks( 50 results.result_time = converter.ToLocalTimeTicks(
49 RemoteTimeTicks::FromTimeTicks( 51 RemoteTimeTicks::FromTimeTicks(
50 test_time)).ToTimeTicks().ToInternalValue(); 52 test_time)).ToTimeTicks().ToInternalValue();
51 results.result_delta = converter.ToLocalTimeDelta( 53 results.result_delta = converter.ToLocalTimeDelta(
52 RemoteTimeDelta::FromRawDelta(params.test_delta)).ToInt32(); 54 RemoteTimeDelta::FromRawDelta(params.test_delta)).ToInt32();
55 results.is_skew_additive = converter.IsSkewAdditiveForMetrics();
56 results.skew = converter.GetSkewForMetrics().ToInternalValue();
53 return results; 57 return results;
54 } 58 }
55 59
56 TEST(InterProcessTimeTicksConverterTest, NullTime) { 60 TEST(InterProcessTimeTicksConverterTest, NullTime) {
57 // Null / zero times should remain null. 61 // Null / zero times should remain null.
58 TestParams p; 62 TestParams p;
59 p.local_lower_bound = 1; 63 p.local_lower_bound = 1;
60 p.remote_lower_bound = 2; 64 p.remote_lower_bound = 2;
61 p.remote_upper_bound = 5; 65 p.remote_upper_bound = 5;
62 p.local_upper_bound = 6; 66 p.local_upper_bound = 6;
63 p.test_time = 0; 67 p.test_time = 0;
64 p.test_delta = 0; 68 p.test_delta = 0;
65 TestResults results = RunTest(p); 69 TestResults results = RunTest(p);
66 EXPECT_EQ(0, results.result_time); 70 EXPECT_EQ(0, results.result_time);
67 EXPECT_EQ(0, results.result_delta); 71 EXPECT_EQ(0, results.result_delta);
68 } 72 }
69 73
70 TEST(InterProcessTimeTicksConverterTest, NoSkew) { 74 TEST(InterProcessTimeTicksConverterTest, NoSkew) {
71 // All times are monotonic and centered, so no adjustment should occur. 75 // All times are monotonic and centered, so no adjustment should occur.
72 TestParams p; 76 TestParams p;
73 p.local_lower_bound = 1; 77 p.local_lower_bound = 1;
74 p.remote_lower_bound = 2; 78 p.remote_lower_bound = 2;
75 p.remote_upper_bound = 5; 79 p.remote_upper_bound = 5;
76 p.local_upper_bound = 6; 80 p.local_upper_bound = 6;
77 p.test_time = 3; 81 p.test_time = 3;
78 p.test_delta = 1; 82 p.test_delta = 1;
79 TestResults results = RunTest(p); 83 TestResults results = RunTest(p);
80 EXPECT_EQ(3, results.result_time); 84 EXPECT_EQ(3, results.result_time);
81 EXPECT_EQ(1, results.result_delta); 85 EXPECT_EQ(1, results.result_delta);
86 EXPECT_TRUE(results.is_skew_additive);
87 EXPECT_EQ(0, results.skew);
82 } 88 }
83 89
84 TEST(InterProcessTimeTicksConverterTest, OffsetMidpoints) { 90 TEST(InterProcessTimeTicksConverterTest, OffsetMidpoints) {
85 // All times are monotonic, but not centered. Adjust the |remote_*| times so 91 // All times are monotonic, but not centered. Adjust the |remote_*| times so
86 // they are centered within the |local_*| times. 92 // they are centered within the |local_*| times.
87 TestParams p; 93 TestParams p;
88 p.local_lower_bound = 1; 94 p.local_lower_bound = 1;
89 p.remote_lower_bound = 3; 95 p.remote_lower_bound = 3;
90 p.remote_upper_bound = 6; 96 p.remote_upper_bound = 6;
91 p.local_upper_bound = 6; 97 p.local_upper_bound = 6;
92 p.test_time = 4; 98 p.test_time = 4;
93 p.test_delta = 1; 99 p.test_delta = 1;
94 TestResults results = RunTest(p); 100 TestResults results = RunTest(p);
95 EXPECT_EQ(3, results.result_time); 101 EXPECT_EQ(3, results.result_time);
96 EXPECT_EQ(1, results.result_delta); 102 EXPECT_EQ(1, results.result_delta);
103 EXPECT_TRUE(results.is_skew_additive);
104 EXPECT_EQ(1, results.skew);
97 } 105 }
98 106
99 TEST(InterProcessTimeTicksConverterTest, DoubleEndedSkew) { 107 TEST(InterProcessTimeTicksConverterTest, DoubleEndedSkew) {
100 // |remote_lower_bound| occurs before |local_lower_bound| and 108 // |remote_lower_bound| occurs before |local_lower_bound| and
101 // |remote_upper_bound| occurs after |local_upper_bound|. We must adjust both 109 // |remote_upper_bound| occurs after |local_upper_bound|. We must adjust both
102 // bounds and scale down the delta. |test_time| is on the midpoint, so it 110 // bounds and scale down the delta. |test_time| is on the midpoint, so it
103 // doesn't change. The ratio of local time to network time is 1:2, so we scale 111 // doesn't change. The ratio of local time to network time is 1:2, so we scale
104 // |test_delta| to half. 112 // |test_delta| to half.
105 TestParams p; 113 TestParams p;
106 p.local_lower_bound = 3; 114 p.local_lower_bound = 3;
107 p.remote_lower_bound = 1; 115 p.remote_lower_bound = 1;
108 p.remote_upper_bound = 9; 116 p.remote_upper_bound = 9;
109 p.local_upper_bound = 7; 117 p.local_upper_bound = 7;
110 p.test_time = 5; 118 p.test_time = 5;
111 p.test_delta = 2; 119 p.test_delta = 2;
112 TestResults results = RunTest(p); 120 TestResults results = RunTest(p);
113 EXPECT_EQ(5, results.result_time); 121 EXPECT_EQ(5, results.result_time);
114 EXPECT_EQ(1, results.result_delta); 122 EXPECT_EQ(1, results.result_delta);
123 EXPECT_FALSE(results.is_skew_additive);
115 } 124 }
116 125
117 TEST(InterProcessTimeTicksConverterTest, FrontEndSkew) { 126 TEST(InterProcessTimeTicksConverterTest, FrontEndSkew) {
118 // |remote_upper_bound| is coherent, but |remote_lower_bound| is not. So we 127 // |remote_upper_bound| is coherent, but |remote_lower_bound| is not. So we
119 // adjust the lower bound and move |test_time| out. The scale factor is 2:3, 128 // adjust the lower bound and move |test_time| out. The scale factor is 2:3,
120 // but since we use integers, the numbers truncate from 3.33 to 3 and 1.33 129 // but since we use integers, the numbers truncate from 3.33 to 3 and 1.33
121 // to 1. 130 // to 1.
122 TestParams p; 131 TestParams p;
123 p.local_lower_bound = 3; 132 p.local_lower_bound = 3;
124 p.remote_lower_bound = 1; 133 p.remote_lower_bound = 1;
125 p.remote_upper_bound = 7; 134 p.remote_upper_bound = 7;
126 p.local_upper_bound = 7; 135 p.local_upper_bound = 7;
127 p.test_time = 3; 136 p.test_time = 3;
128 p.test_delta = 2; 137 p.test_delta = 2;
129 TestResults results = RunTest(p); 138 TestResults results = RunTest(p);
130 EXPECT_EQ(4, results.result_time); 139 EXPECT_EQ(4, results.result_time);
131 EXPECT_EQ(1, results.result_delta); 140 EXPECT_EQ(1, results.result_delta);
141 EXPECT_FALSE(results.is_skew_additive);
132 } 142 }
133 143
134 TEST(InterProcessTimeTicksConverterTest, BackEndSkew) { 144 TEST(InterProcessTimeTicksConverterTest, BackEndSkew) {
135 // Like the previous test, but |remote_lower_bound| is coherent and 145 // Like the previous test, but |remote_lower_bound| is coherent and
136 // |remote_upper_bound| is skewed. 146 // |remote_upper_bound| is skewed.
137 TestParams p; 147 TestParams p;
138 p.local_lower_bound = 1; 148 p.local_lower_bound = 1;
139 p.remote_lower_bound = 1; 149 p.remote_lower_bound = 1;
140 p.remote_upper_bound = 7; 150 p.remote_upper_bound = 7;
141 p.local_upper_bound = 5; 151 p.local_upper_bound = 5;
142 p.test_time = 3; 152 p.test_time = 3;
143 p.test_delta = 2; 153 p.test_delta = 2;
144 TestResults results = RunTest(p); 154 TestResults results = RunTest(p);
145 EXPECT_EQ(2, results.result_time); 155 EXPECT_EQ(2, results.result_time);
146 EXPECT_EQ(1, results.result_delta); 156 EXPECT_EQ(1, results.result_delta);
157 EXPECT_FALSE(results.is_skew_additive);
147 } 158 }
148 159
149 TEST(InterProcessTimeTicksConverterTest, Instantaneous) { 160 TEST(InterProcessTimeTicksConverterTest, Instantaneous) {
150 // The bounds are all okay, but the |remote_lower_bound| and 161 // The bounds are all okay, but the |remote_lower_bound| and
151 // |remote_upper_bound| have the same value. No adjustments should be made and 162 // |remote_upper_bound| have the same value. No adjustments should be made and
152 // no divide-by-zero errors should occur. 163 // no divide-by-zero errors should occur.
153 TestParams p; 164 TestParams p;
154 p.local_lower_bound = 1; 165 p.local_lower_bound = 1;
155 p.remote_lower_bound = 2; 166 p.remote_lower_bound = 2;
156 p.remote_upper_bound = 2; 167 p.remote_upper_bound = 2;
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 p.test_time = 41; 243 p.test_time = 41;
233 p.test_delta = 0; 244 p.test_delta = 0;
234 TestResults results = RunTest(p); 245 TestResults results = RunTest(p);
235 EXPECT_EQ(20, results.result_time); 246 EXPECT_EQ(20, results.result_time);
236 EXPECT_EQ(0, results.result_delta); 247 EXPECT_EQ(0, results.result_delta);
237 } 248 }
238 249
239 } // anonymous namespace 250 } // anonymous namespace
240 251
241 } // namespace content 252 } // namespace content
OLDNEW
« no previous file with comments | « content/common/inter_process_time_ticks_converter.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698