60 lines
2.1 KiB
C++
60 lines
2.1 KiB
C++
|
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifdef MOZ_GECKO_PROFILER
|
|
|
|
# include "ProfileBuffer.h"
|
|
|
|
# include "mozilla/PowerOfTwo.h"
|
|
# include "mozilla/ProfileBufferChunkManagerWithLocalLimit.h"
|
|
# include "mozilla/ProfileChunkedBuffer.h"
|
|
|
|
# include "gtest/gtest.h"
|
|
|
|
// Make sure we can record one entry and read it
|
|
TEST(ThreadProfile, InsertOneEntry)
|
|
{
|
|
mozilla::ProfileBufferChunkManagerWithLocalLimit chunkManager(
|
|
2 * (1 + uint32_t(sizeof(ProfileBufferEntry))) * 4,
|
|
2 * (1 + uint32_t(sizeof(ProfileBufferEntry))));
|
|
mozilla::ProfileChunkedBuffer profileChunkedBuffer(
|
|
mozilla::ProfileChunkedBuffer::ThreadSafety::WithMutex, chunkManager);
|
|
auto pb = mozilla::MakeUnique<ProfileBuffer>(profileChunkedBuffer);
|
|
pb->AddEntry(ProfileBufferEntry::Time(123.1));
|
|
ProfileBufferEntry entry = pb->GetEntry(pb->BufferRangeStart());
|
|
ASSERT_TRUE(entry.IsTime());
|
|
ASSERT_EQ(123.1, entry.GetDouble());
|
|
}
|
|
|
|
// See if we can insert some entries
|
|
TEST(ThreadProfile, InsertEntriesNoWrap)
|
|
{
|
|
mozilla::ProfileBufferChunkManagerWithLocalLimit chunkManager(
|
|
100 * (1 + uint32_t(sizeof(ProfileBufferEntry))),
|
|
100 * (1 + uint32_t(sizeof(ProfileBufferEntry))) / 4);
|
|
mozilla::ProfileChunkedBuffer profileChunkedBuffer(
|
|
mozilla::ProfileChunkedBuffer::ThreadSafety::WithMutex, chunkManager);
|
|
auto pb = mozilla::MakeUnique<ProfileBuffer>(profileChunkedBuffer);
|
|
const int test_size = 50;
|
|
for (int i = 0; i < test_size; i++) {
|
|
pb->AddEntry(ProfileBufferEntry::Time(i));
|
|
}
|
|
int times = 0;
|
|
uint64_t readPos = pb->BufferRangeStart();
|
|
while (readPos != pb->BufferRangeEnd()) {
|
|
ProfileBufferEntry entry = pb->GetEntry(readPos);
|
|
readPos++;
|
|
if (entry.GetKind() == ProfileBufferEntry::Kind::INVALID) {
|
|
continue;
|
|
}
|
|
ASSERT_TRUE(entry.IsTime());
|
|
ASSERT_EQ(times, entry.GetDouble());
|
|
times++;
|
|
}
|
|
ASSERT_EQ(test_size, times);
|
|
}
|
|
|
|
#endif // MOZ_GECKO_PROFILER
|