webrtc_m130/webrtc/base/taskparent.cc
nisse 9900be313c Revert of Delete unused TaskRunner abstraction. (patchset #2 id:20001 of https://codereview.webrtc.org/2622923002/ )
Reason for revert:
I had missed updating a few of Chrome's #includes, breaking the build.

Original issue's description:
> Delete unused TaskRunner abstraction.
>
> This is the fifth and final step in the process started in cl https://codereview.webrtc.org/2696703009/
>
> Depends on the landing of a copy of this code in Chrome (step 4), cl
> https://codereview.chromium.org/2694903005/
>
> BUG=webrtc:6424
>
> Review-Url: https://codereview.webrtc.org/2622923002
> Cr-Commit-Position: refs/heads/master@{#17107}
> Committed: 2d15fdd91b

TBR=pthatcher@webrtc.org,kjellander@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:6424

Review-Url: https://codereview.webrtc.org/2732363004
Cr-Commit-Position: refs/heads/master@{#17109}
2017-03-08 10:01:07 +00:00

99 lines
2.3 KiB
C++

/*
* Copyright 2004 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.
*/
#include <algorithm>
#include "webrtc/base/taskparent.h"
#include "webrtc/base/checks.h"
#include "webrtc/base/task.h"
#include "webrtc/base/taskrunner.h"
namespace rtc {
TaskParent::TaskParent(Task* derived_instance, TaskParent *parent)
: parent_(parent) {
RTC_DCHECK(derived_instance != NULL);
RTC_DCHECK(parent != NULL);
runner_ = parent->GetRunner();
parent_->AddChild(derived_instance);
Initialize();
}
TaskParent::TaskParent(TaskRunner *derived_instance)
: parent_(NULL),
runner_(derived_instance) {
RTC_DCHECK(derived_instance != NULL);
Initialize();
}
TaskParent::~TaskParent() = default;
// Does common initialization of member variables
void TaskParent::Initialize() {
children_.reset(new ChildSet());
child_error_ = false;
}
void TaskParent::AddChild(Task *child) {
children_->insert(child);
}
#if RTC_DCHECK_IS_ON
bool TaskParent::IsChildTask(Task *task) {
RTC_DCHECK(task != NULL);
return task->parent_ == this && children_->find(task) != children_->end();
}
#endif
bool TaskParent::AllChildrenDone() {
for (ChildSet::iterator it = children_->begin();
it != children_->end();
++it) {
if (!(*it)->IsDone())
return false;
}
return true;
}
bool TaskParent::AnyChildError() {
return child_error_;
}
void TaskParent::AbortAllChildren() {
if (children_->size() > 0) {
#if RTC_DCHECK_IS_ON
runner_->IncrementAbortCount();
#endif
ChildSet copy = *children_;
for (ChildSet::iterator it = copy.begin(); it != copy.end(); ++it) {
(*it)->Abort(true); // Note we do not wake
}
#if RTC_DCHECK_IS_ON
runner_->DecrementAbortCount();
#endif
}
}
void TaskParent::OnStopped(Task *task) {
AbortAllChildren();
parent_->OnChildStopped(task);
}
void TaskParent::OnChildStopped(Task *child) {
if (child->HasError())
child_error_ = true;
children_->erase(child);
}
} // namespace rtc