• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2020 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "perfetto/ext/trace_processor/importers/memory_tracker/raw_process_memory_node.h"
18 
19 #include <stddef.h>
20 
21 #include "perfetto/base/build_config.h"
22 #include "test/gtest_and_gmock.h"
23 
24 namespace perfetto {
25 namespace trace_processor {
26 
27 namespace {
28 
29 const LevelOfDetail kLevelOfDetail = LevelOfDetail::kDetailed;
30 
31 }  // namespace
32 
TEST(RawProcessMemoryNodeTest,MoveConstructor)33 TEST(RawProcessMemoryNodeTest, MoveConstructor) {
34   const auto source = MemoryAllocatorNodeId(42);
35   const auto target = MemoryAllocatorNodeId(4242);
36 
37   std::unique_ptr<RawMemoryGraphNode> mad1(
38       new RawMemoryGraphNode("mad1", kLevelOfDetail, source));
39   std::unique_ptr<RawMemoryGraphNode> mad2(
40       new RawMemoryGraphNode("mad2", kLevelOfDetail, target));
41 
42   RawProcessMemoryNode::MemoryNodesMap nodesMap;
43   nodesMap.emplace(mad1->absolute_name(), std::move(mad1));
44   nodesMap.emplace(mad2->absolute_name(), std::move(mad2));
45 
46   std::unique_ptr<MemoryGraphEdge> edge(
47       new MemoryGraphEdge(source, target, 10, false));
48 
49   RawProcessMemoryNode::AllocatorNodeEdgesMap edgesMap;
50   edgesMap.emplace(edge->source, std::move(edge));
51 
52   RawProcessMemoryNode pmd1(kLevelOfDetail, std::move(edgesMap),
53                             std::move(nodesMap));
54 
55   RawProcessMemoryNode pmd2(std::move(pmd1));
56 
57   EXPECT_EQ(1u, pmd2.allocator_nodes().count("mad1"));
58   EXPECT_EQ(1u, pmd2.allocator_nodes().count("mad2"));
59   EXPECT_EQ(LevelOfDetail::kDetailed, pmd2.level_of_detail());
60   EXPECT_EQ(1u, pmd2.allocator_nodes_edges().size());
61 }
62 
TEST(RawProcessMemoryNodeTest,MoveAssignment)63 TEST(RawProcessMemoryNodeTest, MoveAssignment) {
64   const auto source = MemoryAllocatorNodeId(42);
65   const auto target = MemoryAllocatorNodeId(4242);
66 
67   std::unique_ptr<RawMemoryGraphNode> mad1(
68       new RawMemoryGraphNode("mad1", kLevelOfDetail, source));
69   std::unique_ptr<RawMemoryGraphNode> mad2(
70       new RawMemoryGraphNode("mad2", kLevelOfDetail, target));
71 
72   RawProcessMemoryNode::MemoryNodesMap nodesMap;
73   nodesMap.emplace(mad1->absolute_name(), std::move(mad1));
74   nodesMap.emplace(mad2->absolute_name(), std::move(mad2));
75 
76   std::unique_ptr<MemoryGraphEdge> edge(
77       new MemoryGraphEdge(source, target, 10, false));
78 
79   RawProcessMemoryNode::AllocatorNodeEdgesMap edgesMap;
80   edgesMap.emplace(edge->source, std::move(edge));
81 
82   RawProcessMemoryNode pmd1(kLevelOfDetail, std::move(edgesMap),
83                             std::move(nodesMap));
84 
85   RawProcessMemoryNode pmd2(LevelOfDetail::kBackground);
86 
87   pmd2 = std::move(pmd1);
88   EXPECT_EQ(1u, pmd2.allocator_nodes().count("mad1"));
89   EXPECT_EQ(1u, pmd2.allocator_nodes().count("mad2"));
90   EXPECT_EQ(0u, pmd2.allocator_nodes().count("mad3"));
91   EXPECT_EQ(LevelOfDetail::kDetailed, pmd2.level_of_detail());
92   EXPECT_EQ(1u, pmd2.allocator_nodes_edges().size());
93 }
94 
95 }  // namespace trace_processor
96 }  // namespace perfetto
97