- add sources.
[platform/framework/web/crosswalk.git] / src / mojo / public / tests / system_core_perftest.cc
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/system/core.h"
6
7 #include "base/basictypes.h"
8 #include "base/bind.h"
9 #include "base/logging.h"
10 #include "mojo/public/tests/test_support.h"
11
12 namespace mojo {
13 namespace {
14
15 class SystemPerftest : public test::TestBase {
16  public:
17   SystemPerftest() {}
18   virtual ~SystemPerftest() {}
19
20   void NoOp() {
21   }
22
23   void MessagePipe_CreateAndClose() {
24     MojoResult result;
25     result = CreateMessagePipe(&h_0_, &h_1_);
26     DCHECK_EQ(result, MOJO_RESULT_OK);
27     result = Close(h_0_);
28     DCHECK_EQ(result, MOJO_RESULT_OK);
29     result = Close(h_1_);
30     DCHECK_EQ(result, MOJO_RESULT_OK);
31   }
32
33   void MessagePipe_WriteAndRead(void* buffer, uint32_t bytes) {
34     MojoResult result;
35     result = WriteMessage(h_0_,
36                           buffer, bytes,
37                           NULL, 0,
38                           MOJO_WRITE_MESSAGE_FLAG_NONE);
39     DCHECK_EQ(result, MOJO_RESULT_OK);
40     uint32_t read_bytes = bytes;
41     result = ReadMessage(h_1_,
42                          buffer, &read_bytes,
43                          NULL, NULL,
44                          MOJO_READ_MESSAGE_FLAG_NONE);
45     DCHECK_EQ(result, MOJO_RESULT_OK);
46   }
47
48   void MessagePipe_EmptyRead() {
49     MojoResult result;
50     result = ReadMessage(h_0_,
51                          NULL, NULL,
52                          NULL, NULL,
53                          MOJO_READ_MESSAGE_FLAG_MAY_DISCARD);
54     DCHECK_EQ(result, MOJO_RESULT_NOT_FOUND);
55   }
56
57  protected:
58   Handle h_0_;
59   Handle h_1_;
60
61  private:
62   DISALLOW_COPY_AND_ASSIGN(SystemPerftest);
63 };
64
65 // A no-op test so we can compare performance.
66 TEST_F(SystemPerftest, NoOp) {
67   test::IterateAndReportPerf(
68       "NoOp",
69       base::Bind(&SystemPerftest::NoOp,
70                  base::Unretained(this)));
71 }
72
73 TEST_F(SystemPerftest, MessagePipe_CreateAndClose) {
74   test::IterateAndReportPerf(
75       "MessagePipe_CreateAndClose",
76       base::Bind(&SystemPerftest::MessagePipe_CreateAndClose,
77                  base::Unretained(this)));
78 }
79
80 TEST_F(SystemPerftest, MessagePipe_WriteAndRead) {
81   CHECK_EQ(CreateMessagePipe(&h_0_, &h_1_), MOJO_RESULT_OK);
82   char buffer[10000] = { 0 };
83   test::IterateAndReportPerf(
84       "MessagePipe_WriteAndRead_10bytes",
85       base::Bind(&SystemPerftest::MessagePipe_WriteAndRead,
86                  base::Unretained(this),
87                  static_cast<void*>(buffer), static_cast<uint32_t>(10)));
88   test::IterateAndReportPerf(
89       "MessagePipe_WriteAndRead_100bytes",
90       base::Bind(&SystemPerftest::MessagePipe_WriteAndRead,
91                  base::Unretained(this),
92                  static_cast<void*>(buffer), static_cast<uint32_t>(100)));
93   test::IterateAndReportPerf(
94       "MessagePipe_WriteAndRead_1000bytes",
95       base::Bind(&SystemPerftest::MessagePipe_WriteAndRead,
96                  base::Unretained(this),
97                  static_cast<void*>(buffer), static_cast<uint32_t>(1000)));
98   test::IterateAndReportPerf(
99       "MessagePipe_WriteAndRead_10000bytes",
100       base::Bind(&SystemPerftest::MessagePipe_WriteAndRead,
101                  base::Unretained(this),
102                  static_cast<void*>(buffer), static_cast<uint32_t>(10000)));
103   CHECK_EQ(Close(h_0_), MOJO_RESULT_OK);
104   CHECK_EQ(Close(h_1_), MOJO_RESULT_OK);
105 }
106
107 TEST_F(SystemPerftest, MessagePipe_EmptyRead) {
108   CHECK_EQ(CreateMessagePipe(&h_0_, &h_1_), MOJO_RESULT_OK);
109   test::IterateAndReportPerf(
110       "MessagePipe_EmptyRead",
111       base::Bind(&SystemPerftest::MessagePipe_EmptyRead,
112                  base::Unretained(this)));
113   CHECK_EQ(Close(h_0_), MOJO_RESULT_OK);
114   CHECK_EQ(Close(h_1_), MOJO_RESULT_OK);
115 }
116
117 }  // namespace
118 }  // namespace mojo