Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(257)

Unified Diff: components/metrics/call_stack_profile_metrics_provider_unittest.cc

Issue 1029653002: Enable startup profiling by Win x64 stack sampling profiler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@statprof-metrics-provider
Patch Set: add test Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/metrics/call_stack_profile_metrics_provider.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/metrics/call_stack_profile_metrics_provider_unittest.cc
diff --git a/components/metrics/call_stack_profile_metrics_provider_unittest.cc b/components/metrics/call_stack_profile_metrics_provider_unittest.cc
index a4e3efb9cc9935311307079f48aa345fb83d8628..9700bf04e7f8b1c19a6562ae6339dd988952bb50 100644
--- a/components/metrics/call_stack_profile_metrics_provider_unittest.cc
+++ b/components/metrics/call_stack_profile_metrics_provider_unittest.cc
@@ -4,9 +4,11 @@
#include "components/metrics/call_stack_profile_metrics_provider.h"
+#include "base/metrics/field_trial.h"
#include "base/profiler/stack_sampling_profiler.h"
#include "base/strings/string_number_conversions.h"
#include "components/metrics/proto/chrome_user_metrics_extension.pb.h"
+#include "components/variations/entropy_provider.h"
#include "testing/gtest/include/gtest/gtest.h"
using base::StackSamplingProfiler;
@@ -17,8 +19,33 @@ using Sample = StackSamplingProfiler::Sample;
namespace metrics {
+// This test fixture enables the field trial that
+// CallStackProfileMetricsProvider depends on to report profiles.
+class CallStackProfileMetricsProviderTest : public testing::Test {
+ public:
+ CallStackProfileMetricsProviderTest()
+ : field_trial_list_(new base::FieldTrialList(
+ new metrics::SHA1EntropyProvider("foo"))) {
+ base::FieldTrialList::CreateFieldTrial(
+ FieldTrialState::kFieldTrialName,
+ FieldTrialState::kReportProfilesGroupName);
+ }
+
+ ~CallStackProfileMetricsProviderTest() override {}
+
+ private:
+ // Exposes field trial/group names from the CallStackProfileMetricsProvider.
+ class FieldTrialState : public CallStackProfileMetricsProvider {
+ public:
+ using CallStackProfileMetricsProvider::kFieldTrialName;
+ using CallStackProfileMetricsProvider::kReportProfilesGroupName;
+ };
+
+ const scoped_ptr<base::FieldTrialList> field_trial_list_;
+};
+
// Checks that all properties from multiple profiles are filled as expected.
-TEST(CallStackProfileMetricsProviderTest, MultipleProfiles) {
+TEST_F(CallStackProfileMetricsProviderTest, MultipleProfiles) {
const uintptr_t module1_base_address = 0x1000;
const uintptr_t module2_base_address = 0x2000;
const uintptr_t module3_base_address = 0x3000;
@@ -165,7 +192,7 @@ TEST(CallStackProfileMetricsProviderTest, MultipleProfiles) {
}
CallStackProfileMetricsProvider provider;
- provider.SetSourceProfilesForTesting(profiles);
+ provider.AppendSourceProfilesForTesting(profiles);
ChromeUserMetricsExtension uma_proto;
provider.ProvideGeneralMetrics(&uma_proto);
@@ -229,7 +256,7 @@ TEST(CallStackProfileMetricsProviderTest, MultipleProfiles) {
// Checks that all duplicate samples are collapsed with
// preserve_sample_ordering = false.
-TEST(CallStackProfileMetricsProviderTest, RepeatedStacksUnordered) {
+TEST_F(CallStackProfileMetricsProviderTest, RepeatedStacksUnordered) {
const uintptr_t module_base_address = 0x1000;
const Module modules[] = {
@@ -268,7 +295,7 @@ TEST(CallStackProfileMetricsProviderTest, RepeatedStacksUnordered) {
profile.preserve_sample_ordering = false;
CallStackProfileMetricsProvider provider;
- provider.SetSourceProfilesForTesting(std::vector<Profile>(1, profile));
+ provider.AppendSourceProfilesForTesting(std::vector<Profile>(1, profile));
ChromeUserMetricsExtension uma_proto;
provider.ProvideGeneralMetrics(&uma_proto);
@@ -306,7 +333,7 @@ TEST(CallStackProfileMetricsProviderTest, RepeatedStacksUnordered) {
// Checks that only contiguous duplicate samples are collapsed with
// preserve_sample_ordering = true.
-TEST(CallStackProfileMetricsProviderTest, RepeatedStacksOrdered) {
+TEST_F(CallStackProfileMetricsProviderTest, RepeatedStacksOrdered) {
const uintptr_t module_base_address = 0x1000;
const Module modules[] = {
@@ -345,7 +372,7 @@ TEST(CallStackProfileMetricsProviderTest, RepeatedStacksOrdered) {
profile.preserve_sample_ordering = true;
CallStackProfileMetricsProvider provider;
- provider.SetSourceProfilesForTesting(std::vector<Profile>(1, profile));
+ provider.AppendSourceProfilesForTesting(std::vector<Profile>(1, profile));
ChromeUserMetricsExtension uma_proto;
provider.ProvideGeneralMetrics(&uma_proto);
@@ -381,9 +408,8 @@ TEST(CallStackProfileMetricsProviderTest, RepeatedStacksOrdered) {
}
}
-
// Checks that unknown modules produce an empty Entry.
-TEST(CallStackProfileMetricsProviderTest, UnknownModule) {
+TEST_F(CallStackProfileMetricsProviderTest, UnknownModule) {
const Frame frame(reinterpret_cast<const void*>(0x1000),
Frame::kUnknownModuleIndex);
@@ -396,7 +422,7 @@ TEST(CallStackProfileMetricsProviderTest, UnknownModule) {
profile.preserve_sample_ordering = false;
CallStackProfileMetricsProvider provider;
- provider.SetSourceProfilesForTesting(std::vector<Profile>(1, profile));
+ provider.AppendSourceProfilesForTesting(std::vector<Profile>(1, profile));
ChromeUserMetricsExtension uma_proto;
provider.ProvideGeneralMetrics(&uma_proto);
@@ -417,4 +443,32 @@ TEST(CallStackProfileMetricsProviderTest, UnknownModule) {
EXPECT_FALSE(entry.has_module_id_index());
}
+// Checks that pending profiles are only passed back to ProvideGeneralMetrics
+// once.
+TEST_F(CallStackProfileMetricsProviderTest, ProfilesProvidedOnlyOnce) {
+ CallStackProfileMetricsProvider provider;
+ for (int i = 0; i < 2; ++i) {
+ Profile profile;
+ profile.samples.push_back(Sample(1, Frame(
+ reinterpret_cast<const void*>(0x1000), Frame::kUnknownModuleIndex)));
+
+ profile.profile_duration = base::TimeDelta::FromMilliseconds(100);
+ // Use the sampling period to distinguish the two profiles.
+ profile.sampling_period = base::TimeDelta::FromMilliseconds(i);
+ profile.preserve_sample_ordering = false;
+
+ provider.AppendSourceProfilesForTesting(std::vector<Profile>(1, profile));
+ ChromeUserMetricsExtension uma_proto;
+ provider.ProvideGeneralMetrics(&uma_proto);
+
+ ASSERT_EQ(1, uma_proto.sampled_profile().size());
+ const SampledProfile& sampled_profile = uma_proto.sampled_profile().Get(0);
+ ASSERT_TRUE(sampled_profile.has_call_stack_profile());
+ const CallStackProfile& call_stack_profile =
+ sampled_profile.call_stack_profile();
+ ASSERT_TRUE(call_stack_profile.has_sampling_period_ms());
+ EXPECT_EQ(i, call_stack_profile.sampling_period_ms());
+ }
+}
+
} // namespace metrics
« no previous file with comments | « components/metrics/call_stack_profile_metrics_provider.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698