Revert of write frame generator capturer to use TaskQueue instead of EventTimeWrapper (patchset #11 id:300001 of https://codereview.webrtc.org/2750473002/ )
Reason for revert: Changes to frame-generator resulted in reduced fps on android and Mac on all tests. Original issue's description: > Reland of write frame generator capturer to use TaskQueue instead of EventTimeWrapper (patchset #1 id:1 of https://codereview.webrtc.org/2748643002/ ) > > Reason for revert: > Reland with fixes to the failing perf tests. > > Original issue's description: > > Revert of rewrite frame generator capturer to use TaskQueue instead of EventTimeWrapper (patchset #2 id:90001 of https://codereview.webrtc.org/2744003002/ ) > > > > Reason for revert: > > CallPerfTest.ReceivesCpuOveruseAndUnderuse perf test fails due to this CL. It requires very accurate frame rate, which may not be so accurate now. > > > > Original issue's description: > > > Reland of rewrite frame generator capturer to use TaskQueue instead of EventTimeWrapper (patchset #1 id:1 of https://codereview.webrtc.org/2743993002/ ) > > > > > > And enable large full-stack test depending on that change (Reland of https://codereview.webrtc.org/2741823003/) > > > TBR=stefan@webrtc.org,tommi@webrtc.org > > > BUG=webrtc:7301,webrtc:7325 > > > > > > Review-Url: https://codereview.webrtc.org/2744003002 > > > Cr-Commit-Position: refs/heads/master@{#17196} > > > Committed:8c0a5896d1> > > > TBR=stefan@webrtc.org,tommi@webrtc.org,sprang@webrtc.org > > # Skipping CQ checks because original CL landed less than 1 days ago. > > NOPRESUBMIT=true > > NOTREECHECKS=true > > NOTRY=true > > BUG=webrtc:7301,webrtc:7325 > > > > Review-Url: https://codereview.webrtc.org/2748643002 > > Cr-Commit-Position: refs/heads/master@{#17198} > > Committed:382a72a0d3> > BUG=webrtc:7301,webrtc:7325 > > Review-Url: https://codereview.webrtc.org/2750473002 > Cr-Commit-Position: refs/heads/master@{#17253} > Committed:2549ad4fefTBR=sprang@webrtc.org,tommi@webrtc.org,stefan@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7301,webrtc:7325 Review-Url: https://codereview.webrtc.org/2751063005 Cr-Commit-Position: refs/heads/master@{#17276}
This commit is contained in:
parent
c90d3a7395
commit
2a420ce8c4
@ -478,7 +478,7 @@ TEST_F(CallPerfTest, ReceivesCpuOveruseAndUnderuse) {
|
||||
LoadObserver()
|
||||
: SendTest(kLongTimeoutMs),
|
||||
expect_lower_resolution_wants_(true),
|
||||
encoder_(Clock::GetRealTimeClock(), 60 /* delay_ms */) {}
|
||||
encoder_(Clock::GetRealTimeClock(), 35 /* delay_ms */) {}
|
||||
|
||||
void OnFrameGeneratorCapturerCreated(
|
||||
test::FrameGeneratorCapturer* frame_generator_capturer) override {
|
||||
|
||||
@ -10,13 +10,10 @@
|
||||
|
||||
#include "webrtc/test/frame_generator_capturer.h"
|
||||
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include "webrtc/base/criticalsection.h"
|
||||
#include "webrtc/base/platform_thread.h"
|
||||
#include "webrtc/base/task_queue.h"
|
||||
#include "webrtc/system_wrappers/include/clock.h"
|
||||
#include "webrtc/system_wrappers/include/event_wrapper.h"
|
||||
#include "webrtc/system_wrappers/include/sleep.h"
|
||||
#include "webrtc/test/frame_generator.h"
|
||||
#include "webrtc/video_send_stream.h"
|
||||
@ -24,30 +21,6 @@
|
||||
namespace webrtc {
|
||||
namespace test {
|
||||
|
||||
class FrameGeneratorCapturer::InsertFrameTask : public rtc::QueuedTask {
|
||||
public:
|
||||
// Repeats in |repeat_interval_ms|. One-time if |repeat_interval_ms| == 0.
|
||||
InsertFrameTask(
|
||||
webrtc::test::FrameGeneratorCapturer* frame_generator_capturer,
|
||||
uint32_t repeat_interval_ms)
|
||||
: frame_generator_capturer_(frame_generator_capturer),
|
||||
repeat_interval_ms_(repeat_interval_ms) {}
|
||||
|
||||
private:
|
||||
bool Run() override {
|
||||
if (repeat_interval_ms_ > 0) {
|
||||
rtc::TaskQueue::Current()->PostDelayedTask(
|
||||
std::unique_ptr<rtc::QueuedTask>(this), repeat_interval_ms_);
|
||||
}
|
||||
frame_generator_capturer_->InsertFrame();
|
||||
// Task should be deleted only if it's not repeating.
|
||||
return repeat_interval_ms_ == 0;
|
||||
}
|
||||
|
||||
webrtc::test::FrameGeneratorCapturer* const frame_generator_capturer_;
|
||||
const uint32_t repeat_interval_ms_;
|
||||
};
|
||||
|
||||
FrameGeneratorCapturer* FrameGeneratorCapturer::Create(int width,
|
||||
int height,
|
||||
int target_fps,
|
||||
@ -88,17 +61,19 @@ FrameGeneratorCapturer::FrameGeneratorCapturer(
|
||||
sending_(false),
|
||||
sink_(nullptr),
|
||||
sink_wants_observer_(nullptr),
|
||||
tick_(EventTimerWrapper::Create()),
|
||||
thread_(FrameGeneratorCapturer::Run, this, "FrameGeneratorCapturer"),
|
||||
frame_generator_(std::move(frame_generator)),
|
||||
target_fps_(target_fps),
|
||||
first_frame_capture_time_(-1),
|
||||
task_queue_("FrameGeneratorCapturerQueue",
|
||||
rtc::TaskQueue::Priority::HIGH) {
|
||||
first_frame_capture_time_(-1) {
|
||||
RTC_DCHECK(frame_generator_);
|
||||
RTC_DCHECK_GT(target_fps, 0);
|
||||
}
|
||||
|
||||
FrameGeneratorCapturer::~FrameGeneratorCapturer() {
|
||||
Stop();
|
||||
|
||||
thread_.Stop();
|
||||
}
|
||||
|
||||
void FrameGeneratorCapturer::SetFakeRotation(VideoRotation rotation) {
|
||||
@ -112,11 +87,15 @@ bool FrameGeneratorCapturer::Init() {
|
||||
if (frame_generator_.get() == NULL)
|
||||
return false;
|
||||
|
||||
task_queue_.PostDelayedTask(
|
||||
std::unique_ptr<rtc::QueuedTask>(
|
||||
new InsertFrameTask(this, 1000 / target_fps_)),
|
||||
1000 / target_fps_);
|
||||
if (!tick_->StartTimer(true, 1000 / target_fps_))
|
||||
return false;
|
||||
thread_.Start();
|
||||
thread_.SetPriority(rtc::kHighPriority);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool FrameGeneratorCapturer::Run(void* obj) {
|
||||
static_cast<FrameGeneratorCapturer*>(obj)->InsertFrame();
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -134,6 +113,7 @@ void FrameGeneratorCapturer::InsertFrame() {
|
||||
sink_->OnFrame(*frame);
|
||||
}
|
||||
}
|
||||
tick_->Wait(WEBRTC_EVENT_INFINITE);
|
||||
}
|
||||
|
||||
void FrameGeneratorCapturer::Start() {
|
||||
@ -175,11 +155,7 @@ void FrameGeneratorCapturer::RemoveSink(
|
||||
}
|
||||
|
||||
void FrameGeneratorCapturer::ForceFrame() {
|
||||
// One-time non-repeating task,
|
||||
// therefore repeat_interval_ms is 0 in InsertFrameTask()
|
||||
task_queue_.PostTask(
|
||||
std::unique_ptr<rtc::QueuedTask>(new InsertFrameTask(this, 0)));
|
||||
tick_->Set();
|
||||
}
|
||||
|
||||
} // namespace test
|
||||
} // namespace webrtc
|
||||
} // test
|
||||
} // webrtc
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
|
||||
#include "webrtc/api/video/video_frame.h"
|
||||
#include "webrtc/base/criticalsection.h"
|
||||
#include "webrtc/base/task_queue.h"
|
||||
#include "webrtc/base/platform_thread.h"
|
||||
#include "webrtc/test/video_capturer.h"
|
||||
#include "webrtc/typedefs.h"
|
||||
|
||||
@ -74,8 +74,6 @@ class FrameGeneratorCapturer : public VideoCapturer {
|
||||
bool Init();
|
||||
|
||||
private:
|
||||
class InsertFrameTask;
|
||||
|
||||
void InsertFrame();
|
||||
static bool Run(void* obj);
|
||||
|
||||
@ -84,18 +82,17 @@ class FrameGeneratorCapturer : public VideoCapturer {
|
||||
rtc::VideoSinkInterface<VideoFrame>* sink_ GUARDED_BY(&lock_);
|
||||
SinkWantsObserver* sink_wants_observer_ GUARDED_BY(&lock_);
|
||||
|
||||
std::unique_ptr<EventTimerWrapper> tick_;
|
||||
rtc::CriticalSection lock_;
|
||||
rtc::PlatformThread thread_;
|
||||
std::unique_ptr<FrameGenerator> frame_generator_;
|
||||
|
||||
int target_fps_;
|
||||
VideoRotation fake_rotation_ = kVideoRotation_0;
|
||||
|
||||
int64_t first_frame_capture_time_;
|
||||
// Must be the last field, so it will be deconstructed first as tasks
|
||||
// in the TaskQueue access other fields of the instance of this class.
|
||||
rtc::TaskQueue task_queue_;
|
||||
};
|
||||
} // namespace test
|
||||
} // namespace webrtc
|
||||
} // test
|
||||
} // webrtc
|
||||
|
||||
#endif // WEBRTC_TEST_FRAME_GENERATOR_CAPTURER_H_
|
||||
|
||||
@ -534,8 +534,8 @@ TEST_F(FullStackTest, LargeRoomVP8_5thumb) {
|
||||
RunTest(large_room);
|
||||
}
|
||||
|
||||
#if defined(WEBRTC_ANDROID)
|
||||
// Fails on Android:
|
||||
#if defined(WEBRTC_ANDROID) || defined(WEBRTC_WIN)
|
||||
// Fails on Android and win:
|
||||
// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
|
||||
#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
|
||||
#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user