OLD | NEW |
(Empty) | |
| 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 |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "base/android/library_loader/library_prefetcher.h" |
| 6 |
| 7 #include <string> |
| 8 #include <vector> |
| 9 #include "base/debug/proc_maps_linux.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" |
| 11 |
| 12 namespace base { |
| 13 namespace android { |
| 14 |
| 15 namespace { |
| 16 const uint8 kRead = base::debug::MappedMemoryRegion::READ; |
| 17 const uint8 kReadPrivate = base::debug::MappedMemoryRegion::READ | |
| 18 base::debug::MappedMemoryRegion::PRIVATE; |
| 19 const uint8 kExecutePrivate = base::debug::MappedMemoryRegion::EXECUTE | |
| 20 base::debug::MappedMemoryRegion::PRIVATE; |
| 21 } // namespace |
| 22 |
| 23 TEST(NativeLibraryPrefetcherTest, TestIsGoodToPrefetchNoRange) { |
| 24 const base::debug::MappedMemoryRegion regions[4] = { |
| 25 base::debug::MappedMemoryRegion{0x4000, 0x5000, 10, kReadPrivate, ""}, |
| 26 base::debug::MappedMemoryRegion{0x4000, 0x5000, 10, kReadPrivate, "foo"}, |
| 27 base::debug::MappedMemoryRegion{ |
| 28 0x4000, 0x5000, 10, kReadPrivate, "foobar.apk"}, |
| 29 base::debug::MappedMemoryRegion{ |
| 30 0x4000, 0x5000, 10, kReadPrivate, "libchromium.so"}}; |
| 31 for (int i = 0; i < 4; ++i) { |
| 32 ASSERT_FALSE(NativeLibraryPrefetcher::IsGoodToPrefetch(regions[i])); |
| 33 } |
| 34 } |
| 35 |
| 36 TEST(NativeLibraryPrefetcherTest, TestIsGoodToPrefetchUnreadableRange) { |
| 37 const base::debug::MappedMemoryRegion region = { |
| 38 0x4000, 0x5000, 10, kExecutePrivate, "base.apk"}; |
| 39 ASSERT_FALSE(NativeLibraryPrefetcher::IsGoodToPrefetch(region)); |
| 40 } |
| 41 |
| 42 TEST(NativeLibraryPrefetcherTest, TestIsGoodToPrefetchSkipSharedRange) { |
| 43 const base::debug::MappedMemoryRegion region = { |
| 44 0x4000, 0x5000, 10, kRead, "base.apk"}; |
| 45 ASSERT_FALSE(NativeLibraryPrefetcher::IsGoodToPrefetch(region)); |
| 46 } |
| 47 |
| 48 TEST(NativeLibraryPrefetcherTest, TestIsGoodToPrefetchLibchromeRange) { |
| 49 const base::debug::MappedMemoryRegion region = { |
| 50 0x4000, 0x5000, 10, kReadPrivate, "libchrome.so"}; |
| 51 ASSERT_TRUE(NativeLibraryPrefetcher::IsGoodToPrefetch(region)); |
| 52 } |
| 53 |
| 54 TEST(NativeLibraryPrefetcherTest, TestIsGoodToPrefetchBaseApkRange) { |
| 55 const base::debug::MappedMemoryRegion region = { |
| 56 0x4000, 0x5000, 10, kReadPrivate, "base.apk"}; |
| 57 ASSERT_TRUE(NativeLibraryPrefetcher::IsGoodToPrefetch(region)); |
| 58 } |
| 59 |
| 60 TEST(NativeLibraryPrefetcherTest, |
| 61 TestFilterLibchromeRangesOnlyIfPossibleNoLibchrome) { |
| 62 std::vector<base::debug::MappedMemoryRegion> regions; |
| 63 regions.push_back( |
| 64 base::debug::MappedMemoryRegion{0x1, 0x2, 0, kReadPrivate, "base.apk"}); |
| 65 regions.push_back( |
| 66 base::debug::MappedMemoryRegion{0x3, 0x4, 0, kReadPrivate, "base.apk"}); |
| 67 std::vector<NativeLibraryPrefetcher::AddressRange> ranges; |
| 68 NativeLibraryPrefetcher::FilterLibchromeRangesOnlyIfPossible(regions, |
| 69 &ranges); |
| 70 EXPECT_EQ(ranges.size(), 2U); |
| 71 EXPECT_EQ(ranges[0].first, 0x1U); |
| 72 EXPECT_EQ(ranges[0].second, 0x2U); |
| 73 EXPECT_EQ(ranges[1].first, 0x3U); |
| 74 EXPECT_EQ(ranges[1].second, 0x4U); |
| 75 } |
| 76 |
| 77 TEST(NativeLibraryPrefetcherTest, |
| 78 TestFilterLibchromeRangesOnlyIfPossibleHasLibchrome) { |
| 79 std::vector<base::debug::MappedMemoryRegion> regions; |
| 80 regions.push_back( |
| 81 base::debug::MappedMemoryRegion{0x1, 0x2, 0, kReadPrivate, "base.apk"}); |
| 82 regions.push_back(base::debug::MappedMemoryRegion{ |
| 83 0x6, 0x7, 0, kReadPrivate, "libchrome.so"}); |
| 84 regions.push_back( |
| 85 base::debug::MappedMemoryRegion{0x3, 0x4, 0, kReadPrivate, "base.apk"}); |
| 86 std::vector<NativeLibraryPrefetcher::AddressRange> ranges; |
| 87 NativeLibraryPrefetcher::FilterLibchromeRangesOnlyIfPossible(regions, |
| 88 &ranges); |
| 89 EXPECT_EQ(ranges.size(), 1U); |
| 90 EXPECT_EQ(ranges[0].first, 0x6U); |
| 91 EXPECT_EQ(ranges[0].second, 0x7U); |
| 92 } |
| 93 |
| 94 } // namespace android |
| 95 } // namespace base |
OLD | NEW |