blob: 265e0774a10aa131eb31cad4a4db64b62920ed74 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <stdint.h>
#include "base/test/perf_log.h"
#include "mojo/edk/system/ref_counted.h"
#include "mojo/edk/system/test_utils.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace mojo {
namespace system {
namespace {
class MyClass : public RefCountedThreadSafe<MyClass> {
public:
static RefPtr<MyClass> Create() {
return RefPtr<MyClass>(AdoptRef(new MyClass()));
}
private:
friend class RefCountedThreadSafe<MyClass>;
MyClass() {}
~MyClass() {}
};
TEST(RefCountedPerfTest, OneThreadCreateAdoptDestroy) {
uint64_t iterations = 0;
test::Stopwatch stopwatch;
stopwatch.Start();
do {
for (size_t i = 0; i < 1000; i++, iterations++) {
RefPtr<MyClass> x = MyClass::Create();
x = nullptr;
}
iterations++;
} while (stopwatch.Elapsed() < test::DeadlineFromMilliseconds(1000));
double elapsed = stopwatch.Elapsed() / 1000000.0;
base::LogPerfResult("OneThreadCreateAdoptDestroy", iterations / elapsed,
"iterations/s");
}
TEST(RefCountedPerfTest, OneThreadAssignRefPtr) {
RefPtr<MyClass> x = MyClass::Create();
uint64_t iterations = 0;
test::Stopwatch stopwatch;
stopwatch.Start();
do {
for (size_t i = 0; i < 1000; i++, iterations++) {
RefPtr<MyClass> y = x;
}
iterations++;
} while (stopwatch.Elapsed() < test::DeadlineFromMilliseconds(1000));
double elapsed = stopwatch.Elapsed() / 1000000.0;
base::LogPerfResult("OneThreadAssignRefPtr", iterations / elapsed,
"iterations/s");
}
// TODO(vtl): Add threaded perf tests.
} // namespace
} // namespace system
} // namespace mojo