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

Side by Side Diff: webrtc/base/cpu_time_unittest.cc

Issue 2877023002: Move webrtc/{base => rtc_base} (Closed)
Patch Set: update presubmit.py and DEPS include rules Created 3 years, 5 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
« no previous file with comments | « webrtc/base/cpu_time.cc ('k') | webrtc/base/crc32.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include <memory>
12 #include <algorithm>
13 #include "webrtc/base/cpu_time.h"
14 #include "webrtc/base/platform_thread.h"
15 #include "webrtc/base/timeutils.h"
16 #include "webrtc/test/gtest.h"
17 #include "webrtc/system_wrappers/include/cpu_info.h"
18 #include "webrtc/system_wrappers/include/sleep.h"
19
20 // Only run these tests on non-instrumented builds, because timing on
21 // instrumented builds is unreliable, causing the test to be flaky.
22 #if defined(THREAD_SANITIZER) || defined(MEMORY_SANITIZER) || \
23 defined(ADDRESS_SANITIZER)
24 #define MAYBE_TEST(test_name) DISABLED_##test_name
25 #else
26 #define MAYBE_TEST(test_name) test_name
27 #endif
28
29 namespace {
30 const int kAllowedErrorMillisecs = 30;
31 const int kProcessingTimeMillisecs = 300;
32 const int kWorkingThreads = 2;
33
34 // Consumes approximately kProcessingTimeMillisecs of CPU time in single thread.
35 bool WorkingFunction(void* counter_pointer) {
36 int64_t* counter = reinterpret_cast<int64_t*>(counter_pointer);
37 *counter = 0;
38 int64_t stop_cpu_time =
39 rtc::GetThreadCpuTimeNanos() +
40 kProcessingTimeMillisecs * rtc::kNumNanosecsPerMillisec;
41 while (rtc::GetThreadCpuTimeNanos() < stop_cpu_time) {
42 (*counter)++;
43 }
44 return false;
45 }
46 } // namespace
47
48 namespace rtc {
49
50 // A minimal test which can be run on instrumented builds, so that they're at
51 // least exercising the code to check for memory leaks/etc.
52 TEST(CpuTimeTest, BasicTest) {
53 int64_t process_start_time_nanos = GetProcessCpuTimeNanos();
54 int64_t thread_start_time_nanos = GetThreadCpuTimeNanos();
55 int64_t process_duration_nanos =
56 GetProcessCpuTimeNanos() - process_start_time_nanos;
57 int64_t thread_duration_nanos =
58 GetThreadCpuTimeNanos() - thread_start_time_nanos;
59 EXPECT_GE(process_duration_nanos, 0);
60 EXPECT_GE(thread_duration_nanos, 0);
61 }
62
63 TEST(CpuTimeTest, MAYBE_TEST(TwoThreads)) {
64 int64_t process_start_time_nanos = GetProcessCpuTimeNanos();
65 int64_t thread_start_time_nanos = GetThreadCpuTimeNanos();
66 int64_t counter1;
67 int64_t counter2;
68 PlatformThread thread1(WorkingFunction, reinterpret_cast<void*>(&counter1),
69 "Thread1");
70 PlatformThread thread2(WorkingFunction, reinterpret_cast<void*>(&counter2),
71 "Thread2");
72 thread1.Start();
73 thread2.Start();
74 thread1.Stop();
75 thread2.Stop();
76
77 EXPECT_GE(counter1, 0);
78 EXPECT_GE(counter2, 0);
79 int64_t process_duration_nanos =
80 GetProcessCpuTimeNanos() - process_start_time_nanos;
81 int64_t thread_duration_nanos =
82 GetThreadCpuTimeNanos() - thread_start_time_nanos;
83 // This thread did almost nothing.
84 // Therefore GetThreadCpuTime is not a wall clock.
85 EXPECT_LE(thread_duration_nanos,
86 kAllowedErrorMillisecs * kNumNanosecsPerMillisec);
87 // Total process time is at least twice working threads' CPU time.
88 // Therefore process and thread times are correctly related.
89 EXPECT_GE(
90 process_duration_nanos,
91 kWorkingThreads * (kProcessingTimeMillisecs - kAllowedErrorMillisecs)
92 * kNumNanosecsPerMillisec);
93 }
94
95 TEST(CpuTimeTest, MAYBE_TEST(Sleeping)) {
96 int64_t process_start_time_nanos = GetProcessCpuTimeNanos();
97 webrtc::SleepMs(kProcessingTimeMillisecs);
98 int64_t process_duration_nanos =
99 GetProcessCpuTimeNanos() - process_start_time_nanos;
100 // Sleeping should not introduce any additional CPU time.
101 // Therefore GetProcessCpuTime is not a wall clock.
102 EXPECT_LE(process_duration_nanos,
103 kWorkingThreads * kAllowedErrorMillisecs * kNumNanosecsPerMillisec);
104 }
105
106 } // namespace rtc
OLDNEW
« no previous file with comments | « webrtc/base/cpu_time.cc ('k') | webrtc/base/crc32.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698