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/tests/test_utils.h" | |
6 | |
7 #include "mojo/public/cpp/system/core.h" | |
8 #include "mojo/public/tests/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 NULL, | |
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 NULL, | |
32 &num_bytes, | |
33 NULL, | |
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_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE); | |
42 if (rv != MOJO_RESULT_OK) | |
43 return false; | |
44 did_wait = true; | |
45 } else { | |
46 assert(!num_handles); | |
47 break; | |
48 } | |
49 } | |
50 | |
51 text->resize(num_bytes); | |
52 rv = ReadMessageRaw(handle, | |
53 &text->at(0), | |
54 &num_bytes, | |
55 NULL, | |
56 &num_handles, | |
57 MOJO_READ_MESSAGE_FLAG_NONE); | |
58 return rv == MOJO_RESULT_OK; | |
59 } | |
60 | |
61 bool DiscardMessage(const MessagePipeHandle& handle) { | |
62 MojoResult rv = ReadMessageRaw(handle, NULL, NULL, NULL, NULL, | |
63 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD); | |
64 return rv == MOJO_RESULT_OK; | |
65 } | |
66 | |
67 void IterateAndReportPerf(const char* test_name, | |
68 PerfTestSingleIteration single_iteration, | |
69 void* closure) { | |
70 // TODO(vtl): These should be specifiable using command-line flags. | |
71 static const size_t kGranularity = 100; | |
72 static const MojoTimeTicks kPerftestTimeMicroseconds = 3 * 1000000; | |
73 | |
74 const MojoTimeTicks start_time = GetTimeTicksNow(); | |
75 MojoTimeTicks end_time; | |
76 size_t iterations = 0; | |
77 do { | |
78 for (size_t i = 0; i < kGranularity; i++) | |
79 (*single_iteration)(closure); | |
80 iterations += kGranularity; | |
81 | |
82 end_time = GetTimeTicksNow(); | |
83 } while (end_time - start_time < kPerftestTimeMicroseconds); | |
84 | |
85 MojoTestSupportLogPerfResult(test_name, | |
86 1000000.0 * iterations / (end_time - start_time), | |
87 "iterations/second"); | |
88 } | |
89 | |
90 } // namespace test | |
91 } // namespace mojo | |
OLD | NEW |