webrtc_m130/rtc_base/task_queue_unittest.cc

82 lines
2.2 KiB
C++
Raw Normal View History

/*
* Copyright 2016 The WebRTC Project Authors. All rights reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#if defined(WEBRTC_WIN)
// clang-format off
#include <windows.h> // Must come first.
#include <mmsystem.h>
// clang-format on
#endif
#include <stdint.h>
#include <memory>
#include <utility>
#include <vector>
#include "absl/memory/memory.h"
#include "rtc_base/event.h"
#include "rtc_base/task_queue_for_test.h"
#include "rtc_base/time_utils.h"
#include "test/gtest.h"
namespace rtc {
namespace {
// Noop on all platforms except Windows, where it turns on high precision
// multimedia timers which increases the precision of TimeMillis() while in
// scope.
class EnableHighResTimers {
public:
#if !defined(WEBRTC_WIN)
EnableHighResTimers() {}
#else
EnableHighResTimers() : enabled_(timeBeginPeriod(1) == TIMERR_NOERROR) {}
~EnableHighResTimers() {
if (enabled_)
timeEndPeriod(1);
}
private:
const bool enabled_;
#endif
};
void CheckCurrent(Event* signal, TaskQueue* queue) {
EXPECT_TRUE(queue->IsCurrent());
if (signal)
signal->Set();
}
} // namespace
// This task needs to be run manually due to the slowness of some of our bots.
// TODO(tommi): Can we run this on the perf bots?
TEST(TaskQueueTest, DISABLED_PostDelayedHighRes) {
EnableHighResTimers high_res_scope;
static const char kQueueName[] = "PostDelayedHighRes";
Event event;
webrtc::TaskQueueForTest queue(kQueueName, TaskQueue::Priority::HIGH);
uint32_t start = Time();
Reland "TaskQueue: unexpose delayed task convenience methods." This reverts commit 4cd3a0d082d0b9d44fd78eef3d53d4360e99a674. Reason for revert: Downstream build should be fixed. Original change's description: > Revert "TaskQueue: unexpose delayed task convenience methods." > > This reverts commit 08bb6295ea1f438a26f8c1ab01769cfa63943756. > > Reason for revert: Breaks downstream tests > > Original change's description: > > TaskQueue: unexpose delayed task convenience methods. > > > > Bug: webrtc:14165 > > Change-Id: Ieb8580670e9e521580afd68cca6ff631fb6df3f8 > > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/265400 > > Reviewed-by: Harald Alvestrand <hta@webrtc.org> > > Auto-Submit: Markus Handell <handellm@webrtc.org> > > Commit-Queue: Harald Alvestrand <hta@webrtc.org> > > Cr-Commit-Position: refs/heads/main@{#37166} > > Bug: webrtc:14165 > Change-Id: Ia7368cf205622be448ec0ead5d22f211aa071a29 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/265411 > Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com> > Owners-Override: Björn Terelius <terelius@webrtc.org> > Auto-Submit: Björn Terelius <terelius@webrtc.org> > Commit-Queue: Björn Terelius <terelius@webrtc.org> > Cr-Commit-Position: refs/heads/main@{#37167} Bug: webrtc:14165 Change-Id: I3d963d272e8a1431103a5d5fb4568ccacd81119c Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/265395 Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Markus Handell <handellm@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37186}
2022-06-10 14:00:22 +00:00
queue.PostDelayedTask(
webrtc::ToQueuedTask([&event, &queue] { CheckCurrent(&event, &queue); }),
3);
EXPECT_TRUE(event.Wait(1000));
uint32_t end = TimeMillis();
// These tests are a little relaxed due to how "powerful" our test bots can
// be. Most recently we've seen windows bots fire the callback after 94-99ms,
// which is why we have a little bit of leeway backwards as well.
EXPECT_GE(end - start, 3u);
EXPECT_NEAR(end - start, 3, 3u);
}
} // namespace rtc