xref: /aosp_15_r20/external/cronet/base/memory/discardable_memory_backing_field_trial_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2019 The Chromium Authors
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 "base/memory/discardable_memory.h"
6 #include "base/memory/discardable_memory_internal.h"
7 #include "base/metrics/field_trial.h"
8 #include "base/metrics/field_trial_params.h"
9 #include "base/test/scoped_feature_list.h"
10 #include "build/build_config.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 
13 #if BUILDFLAG(IS_POSIX)
14 #include "base/memory/madv_free_discardable_memory_posix.h"
15 #endif  // BUILDFLAG(IS_POSIX)
16 
17 #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
18 namespace base {
19 
20 class DiscardableMemoryBackingFieldTrialTest : public ::testing::Test {
21  protected:
22   DiscardableMemoryBackingFieldTrialTest() = default;
23   ~DiscardableMemoryBackingFieldTrialTest() override = default;
24 
25   std::unique_ptr<test::ScopedFeatureList>
GetScopedFeatureListForDiscardableMemoryTrialGroup(DiscardableMemoryTrialGroup group)26   GetScopedFeatureListForDiscardableMemoryTrialGroup(
27       DiscardableMemoryTrialGroup group) {
28     auto feature_list = std::make_unique<test::ScopedFeatureList>();
29     feature_list->InitAndEnableFeatureWithParameters(
30         base::features::kDiscardableMemoryBackingTrial,
31         {{features::kDiscardableMemoryBackingParam.name,
32           features::kDiscardableMemoryBackingParamOptions[group].name}});
33     return feature_list;
34   }
35 };
36 
TEST_F(DiscardableMemoryBackingFieldTrialTest,TrialActiveOnlyIfCapable)37 TEST_F(DiscardableMemoryBackingFieldTrialTest, TrialActiveOnlyIfCapable) {
38   std::unique_ptr<test::ScopedFeatureList> scoped_feature =
39       GetScopedFeatureListForDiscardableMemoryTrialGroup(
40           DiscardableMemoryTrialGroup::kEmulatedSharedMemory);
41   FieldTrial* trial =
42       FeatureList::GetFieldTrial(features::kDiscardableMemoryBackingTrial);
43   ASSERT_NE(trial, nullptr);
44 
45   // Ensure the trial goes from disabled to enabled after querying state, if and
46   // only if we are capable of running the trial. We have force enabled the
47   // trial feature in the feature list, so |trial_enabled| implies that the
48   // device is capable.
49   EXPECT_FALSE(FieldTrialList::IsTrialActive(trial->trial_name()));
50   bool trial_enabled = DiscardableMemoryBackingFieldTrialIsEnabled();
51   EXPECT_EQ(trial_enabled, FieldTrialList::IsTrialActive(trial->trial_name()));
52 }
53 
TEST_F(DiscardableMemoryBackingFieldTrialTest,EmulatedSharedMemoryBackingMatchesTrialGroup)54 TEST_F(DiscardableMemoryBackingFieldTrialTest,
55        EmulatedSharedMemoryBackingMatchesTrialGroup) {
56   std::unique_ptr<test::ScopedFeatureList> scoped_feature =
57       GetScopedFeatureListForDiscardableMemoryTrialGroup(
58           DiscardableMemoryTrialGroup::kEmulatedSharedMemory);
59   if (!DiscardableMemoryBackingFieldTrialIsEnabled())
60     return;
61   DiscardableMemoryBacking backing = GetDiscardableMemoryBacking();
62   EXPECT_EQ(backing, DiscardableMemoryBacking::kSharedMemory);
63 }
64 
TEST_F(DiscardableMemoryBackingFieldTrialTest,MadvFreeBackingMatchesTrialGroup)65 TEST_F(DiscardableMemoryBackingFieldTrialTest,
66        MadvFreeBackingMatchesTrialGroup) {
67   std::unique_ptr<test::ScopedFeatureList> scoped_feature =
68       GetScopedFeatureListForDiscardableMemoryTrialGroup(
69           DiscardableMemoryTrialGroup::kMadvFree);
70   if (!DiscardableMemoryBackingFieldTrialIsEnabled())
71     return;
72   DiscardableMemoryBacking backing = GetDiscardableMemoryBacking();
73   EXPECT_EQ(backing, DiscardableMemoryBacking::kMadvFree);
74 }
75 
76 #if BUILDFLAG(IS_ANDROID)
TEST_F(DiscardableMemoryBackingFieldTrialTest,AshmemBackingMatchesTrialGroup)77 TEST_F(DiscardableMemoryBackingFieldTrialTest, AshmemBackingMatchesTrialGroup) {
78   std::unique_ptr<test::ScopedFeatureList> scoped_feature =
79       GetScopedFeatureListForDiscardableMemoryTrialGroup(
80           DiscardableMemoryTrialGroup::kAshmem);
81   if (!DiscardableMemoryBackingFieldTrialIsEnabled())
82     return;
83   DiscardableMemoryBacking backing = GetDiscardableMemoryBacking();
84   EXPECT_EQ(backing, DiscardableMemoryBacking::kSharedMemory);
85 }
86 #endif  // BUILDFLAG(IS_ANDROID)
87 
88 }  // namespace base
89 
90 #endif  // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) ||
91         // BUILDFLAG(IS_CHROMEOS)
92