/* * Copyright (C) 2019 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 <array> #include <atomic> #include <chrono> #include <deque> #include <thread> #include "perfetto/ext/base/metatrace.h" #include "perfetto/ext/base/thread_annotations.h" #include "src/base/test/test_task_runner.h" #include "test/gtest_and_gmock.h" namespace perfetto { namespace { m; Invoke; class MetatraceTest : public ::testing::Test { … }; TEST_F(MetatraceTest, TagEnablingLogic) { … } // Test that overruns are handled properly and that the writer re-synchronizes // after the reader catches up. TEST_F(MetatraceTest, HandleOverruns) { … } // Sets up a scenario where the writer writes constantly (however, guaranteeing // to not overrun) and the reader catches up. Tests that all events are seen // consistently without gaps. TEST_F(MetatraceTest, InterleavedReadWrites) { … } // Try to hit potential thread races: // - Test that the read callback is posted only once per cycle. // - Test that the final size of the ring buffeer is sane. // - Test that event records are consistent within each thread's event stream. TEST_F(MetatraceTest, ThreadRaces) { … } } // namespace } // namespace perfetto