OLD | NEW |
| (Empty) |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "mojo/public/cpp/test_support/test_utils.h" | |
6 | |
7 #include "mojo/public/cpp/system/core.h" | |
8 #include "mojo/public/cpp/test_support/test_support.h" | |
9 | |
10 namespace mojo { | |
11 namespace test { | |
12 | |
13 bool WriteTextMessage(const MessagePipeHandle& handle, | |
14 const std::string& text) { | |
15 MojoResult rv = WriteMessageRaw(handle, | |
16 text.data(), | |
17 static_cast<uint32_t>(text.size()), | |
18 nullptr, | |
19 0, | |
20 MOJO_WRITE_MESSAGE_FLAG_NONE); | |
21 return rv == MOJO_RESULT_OK; | |
22 } | |
23 | |
24 bool ReadTextMessage(const MessagePipeHandle& handle, std::string* text) { | |
25 MojoResult rv; | |
26 bool did_wait = false; | |
27 | |
28 uint32_t num_bytes = 0, num_handles = 0; | |
29 for (;;) { | |
30 rv = ReadMessageRaw(handle, | |
31 nullptr, | |
32 &num_bytes, | |
33 nullptr, | |
34 &num_handles, | |
35 MOJO_READ_MESSAGE_FLAG_NONE); | |
36 if (rv == MOJO_RESULT_SHOULD_WAIT) { | |
37 if (did_wait) { | |
38 assert(false); // Looping endlessly!? | |
39 return false; | |
40 } | |
41 rv = Wait(handle, MOJO_HANDLE_SIGNAL_READABLE, MOJO_DEADLINE_INDEFINITE, | |
42 nullptr); | |
43 if (rv != MOJO_RESULT_OK) | |
44 return false; | |
45 did_wait = true; | |
46 } else { | |
47 assert(!num_handles); | |
48 break; | |
49 } | |
50 } | |
51 | |
52 text->resize(num_bytes); | |
53 rv = ReadMessageRaw(handle, | |
54 &text->at(0), | |
55 &num_bytes, | |
56 nullptr, | |
57 &num_handles, | |
58 MOJO_READ_MESSAGE_FLAG_NONE); | |
59 return rv == MOJO_RESULT_OK; | |
60 } | |
61 | |
62 bool DiscardMessage(const MessagePipeHandle& handle) { | |
63 MojoResult rv = ReadMessageRaw(handle, | |
64 nullptr, | |
65 nullptr, | |
66 nullptr, | |
67 nullptr, | |
68 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD); | |
69 return rv == MOJO_RESULT_OK; | |
70 } | |
71 | |
72 void IterateAndReportPerf(const char* test_name, | |
73 const char* sub_test_name, | |
74 PerfTestSingleIteration single_iteration, | |
75 void* closure) { | |
76 // TODO(vtl): These should be specifiable using command-line flags. | |
77 static const size_t kGranularity = 100; | |
78 static const MojoTimeTicks kPerftestTimeMicroseconds = 3 * 1000000; | |
79 | |
80 const MojoTimeTicks start_time = GetTimeTicksNow(); | |
81 MojoTimeTicks end_time; | |
82 size_t iterations = 0; | |
83 do { | |
84 for (size_t i = 0; i < kGranularity; i++) | |
85 (*single_iteration)(closure); | |
86 iterations += kGranularity; | |
87 | |
88 end_time = GetTimeTicksNow(); | |
89 } while (end_time - start_time < kPerftestTimeMicroseconds); | |
90 | |
91 MojoTestSupportLogPerfResult(test_name, sub_test_name, | |
92 1000000.0 * iterations / (end_time - start_time), | |
93 "iterations/second"); | |
94 } | |
95 | |
96 } // namespace test | |
97 } // namespace mojo | |
OLD | NEW |