Files
sousa-gecko/xpcom/tests/gtest/TestSegmentedBuffer.cpp
T
Nika Layzell d0de9309d6 Bug 1883177 - Move segment cleanup responsibility to callers, r=xpcom-reviewers,jstutte
Before this change, the nsSegmentedBuffer would automatically dispatch
the `free` call for each individual segment to another thread, aiming to
avoid jank when freeing a large number of buffers on the main thread.
This changes that behaviour such that the responsibility to deal with
the underlying buffer is now on the caller, which has more context about
usage patterns and whether or not to batch the free calls.

Differential Revision: https://phabricator.services.mozilla.com/D235246
2025-02-07 21:31:43 +00:00

42 lines
1.5 KiB
C++

/* 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/. */
#include "gtest/gtest.h"
#include "../../io/nsSegmentedBuffer.h"
#include "nsIEventTarget.h"
using namespace mozilla;
TEST(SegmentedBuffer, AppendAndPop)
{
auto buf = MakeUnique<nsSegmentedBuffer>();
buf->Init(4);
char* seg;
mozilla::UniqueFreePtr<char> poppedSeg;
seg = buf->AppendNewSegment();
EXPECT_TRUE(seg) << "AppendNewSegment failed";
seg = buf->AppendNewSegment();
EXPECT_TRUE(seg) << "AppendNewSegment failed";
seg = buf->AppendNewSegment();
EXPECT_TRUE(seg) << "AppendNewSegment failed";
poppedSeg = buf->PopFirstSegment();
EXPECT_TRUE(poppedSeg) << "PopFirstSegment failed";
poppedSeg = buf->PopFirstSegment();
EXPECT_TRUE(poppedSeg) << "PopFirstSegment failed";
seg = buf->AppendNewSegment();
EXPECT_TRUE(seg) << "AppendNewSegment failed";
seg = buf->AppendNewSegment();
EXPECT_TRUE(seg) << "AppendNewSegment failed";
seg = buf->AppendNewSegment();
EXPECT_TRUE(seg) << "AppendNewSegment failed";
poppedSeg = buf->PopFirstSegment();
EXPECT_TRUE(poppedSeg) << "PopFirstSegment failed";
poppedSeg = buf->PopFirstSegment();
EXPECT_TRUE(poppedSeg) << "PopFirstSegment failed";
poppedSeg = buf->PopFirstSegment();
EXPECT_TRUE(poppedSeg) << "PopFirstSegment failed";
poppedSeg = buf->PopFirstSegment();
EXPECT_TRUE(poppedSeg) << "PopFirstSegment failed";
}