| Index: components/metrics/public/cpp/call_stack_profile_struct_traits_unittest.cc
|
| diff --git a/components/metrics/public/cpp/call_stack_profile_struct_traits_unittest.cc b/components/metrics/public/cpp/call_stack_profile_struct_traits_unittest.cc
|
| deleted file mode 100644
|
| index b9af0473538a125de75ff6a7351cda2a09867a40..0000000000000000000000000000000000000000
|
| --- a/components/metrics/public/cpp/call_stack_profile_struct_traits_unittest.cc
|
| +++ /dev/null
|
| @@ -1,251 +0,0 @@
|
| -// Copyright 2016 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 <utility>
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/macros.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "components/metrics/public/interfaces/call_stack_profile_collector_test.mojom.h"
|
| -#include "mojo/public/cpp/bindings/binding.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace metrics {
|
| -
|
| -namespace {
|
| -
|
| -base::StackSamplingProfiler::CallStackProfile CreateProfile(
|
| - const std::vector<base::StackSamplingProfiler::Module>& modules,
|
| - const std::vector<base::StackSamplingProfiler::Sample>& samples,
|
| - base::TimeDelta profile_duration,
|
| - base::TimeDelta sampling_period) {
|
| - base::StackSamplingProfiler::CallStackProfile profile;
|
| - profile.modules = modules;
|
| - profile.samples = samples;
|
| - profile.profile_duration = profile_duration;
|
| - profile.sampling_period = sampling_period;
|
| - return profile;
|
| -}
|
| -
|
| -}
|
| -
|
| -class CallStackProfileCollectorTestImpl
|
| - : public mojom::CallStackProfileCollectorTest {
|
| - public:
|
| - explicit CallStackProfileCollectorTestImpl(
|
| - mojo::InterfaceRequest<mojom::CallStackProfileCollectorTest> request)
|
| - : binding_(this, std::move(request)) {
|
| - }
|
| -
|
| - // CallStackProfileCollectorTest:
|
| - void BounceFrame(const base::StackSamplingProfiler::Frame& in,
|
| - const BounceFrameCallback& callback) override {
|
| - callback.Run(in);
|
| - }
|
| -
|
| - void BounceModule(const base::StackSamplingProfiler::Module& in,
|
| - const BounceModuleCallback& callback) override {
|
| - callback.Run(in);
|
| - }
|
| -
|
| - void BounceProfile(const base::StackSamplingProfiler::CallStackProfile& in,
|
| - const BounceProfileCallback& callback) override {
|
| - callback.Run(in);
|
| - }
|
| -
|
| - private:
|
| - mojo::Binding<CallStackProfileCollectorTest> binding_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(CallStackProfileCollectorTestImpl);
|
| -};
|
| -
|
| -class CallStackProfileStructTraitsTest : public testing::Test {
|
| - public:
|
| - CallStackProfileStructTraitsTest() : impl_(GetProxy(&proxy_)) {}
|
| -
|
| - protected:
|
| - base::MessageLoop message_loop_;
|
| - mojom::CallStackProfileCollectorTestPtr proxy_;
|
| - CallStackProfileCollectorTestImpl impl_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(CallStackProfileStructTraitsTest);
|
| -};
|
| -
|
| -// Checks serialization/deserialization of Module fields.
|
| -TEST_F(CallStackProfileStructTraitsTest, Module) {
|
| - using Module = base::StackSamplingProfiler::Module;
|
| -
|
| - struct SerializeCase {
|
| - Module module;
|
| - bool expect_success;
|
| - };
|
| -
|
| - const SerializeCase serialize_cases[] = {
|
| - // Null base address.
|
| - {
|
| - Module(0x0, "abcd", base::FilePath(base::FilePath::kCurrentDirectory)),
|
| - true
|
| - },
|
| - // Non-null base address.
|
| - {
|
| - Module(0x10, "abcd", base::FilePath(base::FilePath::kCurrentDirectory)),
|
| - true
|
| - },
|
| - // Base address with a bit set beyond 32 bits, when built for x64.
|
| - {
|
| - Module(1ULL << (sizeof(uintptr_t) * 8) * 3 / 4, "abcd",
|
| - base::FilePath(base::FilePath::kCurrentDirectory)),
|
| - true
|
| - },
|
| - // Empty module id.
|
| - {
|
| - Module(0x10, "", base::FilePath(base::FilePath::kCurrentDirectory)),
|
| - true
|
| - },
|
| - // Module id at the length limit.
|
| - {
|
| - Module(0x10, std::string(40, ' '),
|
| - base::FilePath(base::FilePath::kCurrentDirectory)),
|
| - true
|
| - },
|
| - // Module id beyond the length limit.
|
| - {
|
| - Module(0x10, std::string(41, ' '),
|
| - base::FilePath(base::FilePath::kCurrentDirectory)),
|
| - false
|
| - },
|
| - };
|
| -
|
| - for (const SerializeCase& input : serialize_cases) {
|
| - Module output;
|
| - EXPECT_EQ(input.expect_success,
|
| - proxy_->BounceModule(input.module, &output));
|
| -
|
| - if (!input.expect_success)
|
| - continue;
|
| -
|
| - EXPECT_EQ(input.module.base_address, output.base_address);
|
| - EXPECT_EQ(input.module.id, output.id);
|
| - EXPECT_EQ(input.module.filename, output.filename);
|
| - }
|
| -}
|
| -
|
| -// Checks serialization/deserialization of Frame fields.
|
| -TEST_F(CallStackProfileStructTraitsTest, Frame) {
|
| - using Frame = base::StackSamplingProfiler::Frame;
|
| -
|
| - const Frame serialize_cases[] = {
|
| - // Null instruction pointer.
|
| - Frame(0x0, 10),
|
| - // Non-null instruction pointer.
|
| - Frame(0x10, 10),
|
| - // Instruction pointer with a bit set beyond 32 bits, when built for x64.
|
| - Frame(1ULL << (sizeof(uintptr_t) * 8) * 3 / 4, 10),
|
| - // Zero module index.
|
| - Frame(0xabcd, 0),
|
| - // Non-zero module index.
|
| - Frame(0xabcd, 1),
|
| - // Non-zero module index.
|
| - Frame(0xabcd, 10),
|
| - // Unknown module index.
|
| - Frame(0xabcd, Frame::kUnknownModuleIndex),
|
| - };
|
| -
|
| - for (const Frame& input : serialize_cases) {
|
| - Frame output;
|
| - EXPECT_TRUE(proxy_->BounceFrame(input, &output));
|
| -
|
| - EXPECT_EQ(input.instruction_pointer, output.instruction_pointer);
|
| - EXPECT_EQ(input.module_index, output.module_index);
|
| - }
|
| -}
|
| -
|
| -// Checks serialization/deserialization of Profile fields, including validation
|
| -// of the Frame module_index field.
|
| -TEST_F(CallStackProfileStructTraitsTest, Profile) {
|
| - using Module = base::StackSamplingProfiler::Module;
|
| - using Frame = base::StackSamplingProfiler::Frame;
|
| - using Sample = base::StackSamplingProfiler::Sample;
|
| - using Profile = base::StackSamplingProfiler::CallStackProfile;
|
| -
|
| - struct SerializeCase {
|
| - Profile profile;
|
| - bool expect_success;
|
| - };
|
| -
|
| - const SerializeCase serialize_cases[] = {
|
| - // Empty modules and samples.
|
| - {
|
| - CreateProfile(std::vector<Module>(), std::vector<Sample>(),
|
| - base::TimeDelta::FromSeconds(1),
|
| - base::TimeDelta::FromSeconds(2)),
|
| - true
|
| - },
|
| - // Non-empty modules and empty samples.
|
| - {
|
| - CreateProfile({ Module(0x4000, "a", base::FilePath()) },
|
| - std::vector<Sample>(),
|
| - base::TimeDelta::FromSeconds(1),
|
| - base::TimeDelta::FromSeconds(2)),
|
| - true
|
| - },
|
| - // Valid values for modules and samples.
|
| - {
|
| - CreateProfile({
|
| - Module(0x4000, "a", base::FilePath()),
|
| - Module(0x4100, "b", base::FilePath()),
|
| - },
|
| - {
|
| - {
|
| - Frame(0x4010, 0),
|
| - Frame(0x4110, 1),
|
| - Frame(0x4110, Frame::kUnknownModuleIndex),
|
| - }
|
| - },
|
| - base::TimeDelta::FromSeconds(1),
|
| - base::TimeDelta::FromSeconds(2)),
|
| - true
|
| - },
|
| - // Valid values for modules, but an out of range module index in the second
|
| - // sample.
|
| - {
|
| - CreateProfile({
|
| - Module(0x4000, "a", base::FilePath()),
|
| - Module(0x4100, "b", base::FilePath()),
|
| - },
|
| - {
|
| - {
|
| - Frame(0x4010, 0),
|
| - Frame(0x4110, 1),
|
| - Frame(0x4110, Frame::kUnknownModuleIndex),
|
| - },
|
| - {
|
| - Frame(0x4010, 0),
|
| - Frame(0x4110, 2),
|
| - },
|
| - },
|
| - base::TimeDelta::FromSeconds(1),
|
| - base::TimeDelta::FromSeconds(2)),
|
| - false
|
| - },
|
| - };
|
| -
|
| - for (const SerializeCase& input : serialize_cases) {
|
| - SCOPED_TRACE(&input - &serialize_cases[0]);
|
| -
|
| - Profile output;
|
| - EXPECT_EQ(input.expect_success,
|
| - proxy_->BounceProfile(input.profile, &output));
|
| -
|
| - if (!input.expect_success)
|
| - continue;
|
| -
|
| - EXPECT_EQ(input.profile.modules, output.modules);
|
| - EXPECT_EQ(input.profile.samples, output.samples);
|
| - EXPECT_EQ(input.profile.profile_duration, output.profile_duration);
|
| - EXPECT_EQ(input.profile.sampling_period, output.sampling_period);
|
| - }
|
| -}
|
| -
|
| -} // namespace metrics
|
|
|