| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 <stdint.h> | 5 #include <stdint.h> |
| 6 | 6 |
| 7 #include "mojo/edk/system/test/perf_log.h" | 7 #include "mojo/edk/system/test/perf_log.h" |
| 8 #include "mojo/edk/system/test/stopwatch.h" | 8 #include "mojo/edk/system/test/stopwatch.h" |
| 9 #include "mojo/edk/system/test/timeouts.h" | 9 #include "mojo/edk/system/test/timeouts.h" |
| 10 #include "mojo/edk/util/ref_counted.h" | 10 #include "mojo/edk/util/ref_counted.h" |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 12 | 12 |
| 13 using mojo::system::test::DeadlineFromMilliseconds; |
| 14 using mojo::system::test::LogPerfResult; |
| 15 using mojo::system::test::Stopwatch; |
| 16 |
| 13 namespace mojo { | 17 namespace mojo { |
| 14 namespace util { | 18 namespace util { |
| 15 namespace { | 19 namespace { |
| 16 | 20 |
| 17 class MyClass : public RefCountedThreadSafe<MyClass> { | 21 class MyClass : public RefCountedThreadSafe<MyClass> { |
| 18 public: | 22 public: |
| 19 static RefPtr<MyClass> Create() { | 23 static RefPtr<MyClass> Create() { |
| 20 return RefPtr<MyClass>(AdoptRef(new MyClass())); | 24 return RefPtr<MyClass>(AdoptRef(new MyClass())); |
| 21 } | 25 } |
| 22 | 26 |
| 23 private: | 27 private: |
| 24 friend class RefCountedThreadSafe<MyClass>; | 28 friend class RefCountedThreadSafe<MyClass>; |
| 25 | 29 |
| 26 MyClass() {} | 30 MyClass() {} |
| 27 ~MyClass() {} | 31 ~MyClass() {} |
| 28 }; | 32 }; |
| 29 | 33 |
| 30 TEST(RefCountedPerfTest, OneThreadCreateAdoptDestroy) { | 34 TEST(RefCountedPerfTest, OneThreadCreateAdoptDestroy) { |
| 31 uint64_t iterations = 0; | 35 uint64_t iterations = 0; |
| 32 system::test::Stopwatch stopwatch; | 36 Stopwatch stopwatch; |
| 33 stopwatch.Start(); | 37 stopwatch.Start(); |
| 34 do { | 38 do { |
| 35 for (size_t i = 0; i < 1000; i++, iterations++) { | 39 for (size_t i = 0; i < 1000; i++, iterations++) { |
| 36 RefPtr<MyClass> x = MyClass::Create(); | 40 RefPtr<MyClass> x = MyClass::Create(); |
| 37 x = nullptr; | 41 x = nullptr; |
| 38 } | 42 } |
| 39 iterations++; | 43 iterations++; |
| 40 } while (stopwatch.Elapsed() < system::test::DeadlineFromMilliseconds(1000)); | 44 } while (stopwatch.Elapsed() < DeadlineFromMilliseconds(1000)); |
| 41 double elapsed = stopwatch.Elapsed() / 1000000.0; | 45 double elapsed = stopwatch.Elapsed() / 1000000.0; |
| 42 | 46 |
| 43 system::test::LogPerfResult("OneThreadCreateAdoptDestroy", | 47 LogPerfResult("OneThreadCreateAdoptDestroy", iterations / elapsed, |
| 44 iterations / elapsed, "iterations/s"); | 48 "iterations/s"); |
| 45 } | 49 } |
| 46 | 50 |
| 47 TEST(RefCountedPerfTest, OneThreadAssignRefPtr) { | 51 TEST(RefCountedPerfTest, OneThreadAssignRefPtr) { |
| 48 RefPtr<MyClass> x = MyClass::Create(); | 52 RefPtr<MyClass> x = MyClass::Create(); |
| 49 uint64_t iterations = 0; | 53 uint64_t iterations = 0; |
| 50 system::test::Stopwatch stopwatch; | 54 Stopwatch stopwatch; |
| 51 stopwatch.Start(); | 55 stopwatch.Start(); |
| 52 do { | 56 do { |
| 53 for (size_t i = 0; i < 1000; i++, iterations++) { | 57 for (size_t i = 0; i < 1000; i++, iterations++) { |
| 54 RefPtr<MyClass> y = x; | 58 RefPtr<MyClass> y = x; |
| 55 } | 59 } |
| 56 iterations++; | 60 iterations++; |
| 57 } while (stopwatch.Elapsed() < system::test::DeadlineFromMilliseconds(1000)); | 61 } while (stopwatch.Elapsed() < DeadlineFromMilliseconds(1000)); |
| 58 double elapsed = stopwatch.Elapsed() / 1000000.0; | 62 double elapsed = stopwatch.Elapsed() / 1000000.0; |
| 59 | 63 |
| 60 system::test::LogPerfResult("OneThreadAssignRefPtr", iterations / elapsed, | 64 LogPerfResult("OneThreadAssignRefPtr", iterations / elapsed, "iterations/s"); |
| 61 "iterations/s"); | |
| 62 } | 65 } |
| 63 | 66 |
| 64 // TODO(vtl): Add threaded perf tests. | 67 // TODO(vtl): Add threaded perf tests. |
| 65 | 68 |
| 66 } // namespace | 69 } // namespace |
| 67 } // namespace util | 70 } // namespace util |
| 68 } // namespace mojo | 71 } // namespace mojo |
| OLD | NEW |