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
42 lines
1.5 KiB
C++
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";
|
|
}
|