blob: 653dfe01bc20936a844cf9ddd9a04750f5a86589 [file] [log] [blame]
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "perfetto/ext/trace_processor/importers/memory_tracker/raw_process_memory_node.h"
#include <stddef.h>
#include "perfetto/base/build_config.h"
#include "test/gtest_and_gmock.h"
namespace perfetto {
namespace trace_processor {
namespace {
const LevelOfDetail kLevelOfDetail = LevelOfDetail::kDetailed;
} // namespace
TEST(RawProcessMemoryNodeTest, MoveConstructor) {
const auto source = MemoryAllocatorNodeId(42);
const auto target = MemoryAllocatorNodeId(4242);
std::unique_ptr<RawMemoryGraphNode> mad1(
new RawMemoryGraphNode("mad1", kLevelOfDetail, source));
std::unique_ptr<RawMemoryGraphNode> mad2(
new RawMemoryGraphNode("mad2", kLevelOfDetail, target));
RawProcessMemoryNode::MemoryNodesMap nodesMap;
nodesMap.emplace(mad1->absolute_name(), std::move(mad1));
nodesMap.emplace(mad2->absolute_name(), std::move(mad2));
std::unique_ptr<MemoryGraphEdge> edge(
new MemoryGraphEdge(source, target, 10, false));
RawProcessMemoryNode::AllocatorNodeEdgesMap edgesMap;
edgesMap.emplace(edge->source, std::move(edge));
RawProcessMemoryNode pmd1(kLevelOfDetail, std::move(edgesMap),
std::move(nodesMap));
RawProcessMemoryNode pmd2(std::move(pmd1));
EXPECT_EQ(1u, pmd2.allocator_nodes().count("mad1"));
EXPECT_EQ(1u, pmd2.allocator_nodes().count("mad2"));
EXPECT_EQ(LevelOfDetail::kDetailed, pmd2.level_of_detail());
EXPECT_EQ(1u, pmd2.allocator_nodes_edges().size());
}
TEST(RawProcessMemoryNodeTest, MoveAssignment) {
const auto source = MemoryAllocatorNodeId(42);
const auto target = MemoryAllocatorNodeId(4242);
std::unique_ptr<RawMemoryGraphNode> mad1(
new RawMemoryGraphNode("mad1", kLevelOfDetail, source));
std::unique_ptr<RawMemoryGraphNode> mad2(
new RawMemoryGraphNode("mad2", kLevelOfDetail, target));
RawProcessMemoryNode::MemoryNodesMap nodesMap;
nodesMap.emplace(mad1->absolute_name(), std::move(mad1));
nodesMap.emplace(mad2->absolute_name(), std::move(mad2));
std::unique_ptr<MemoryGraphEdge> edge(
new MemoryGraphEdge(source, target, 10, false));
RawProcessMemoryNode::AllocatorNodeEdgesMap edgesMap;
edgesMap.emplace(edge->source, std::move(edge));
RawProcessMemoryNode pmd1(kLevelOfDetail, std::move(edgesMap),
std::move(nodesMap));
RawProcessMemoryNode pmd2(LevelOfDetail::kBackground);
pmd2 = std::move(pmd1);
EXPECT_EQ(1u, pmd2.allocator_nodes().count("mad1"));
EXPECT_EQ(1u, pmd2.allocator_nodes().count("mad2"));
EXPECT_EQ(0u, pmd2.allocator_nodes().count("mad3"));
EXPECT_EQ(LevelOfDetail::kDetailed, pmd2.level_of_detail());
EXPECT_EQ(1u, pmd2.allocator_nodes_edges().size());
}
} // namespace trace_processor
} // namespace perfetto