/* * Copyright 2014 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file.
*/ #include"src/core/SkTaskGroup.h"
void SkTaskGroup::batch(int N, std::function<void(int)> fn) { // TODO: I really thought we had some sort of more clever chunking logic.
fPending.fetch_add(+N, std::memory_order_relaxed); for (int i = 0; i < N; i++) {
fExecutor.add([fn, i, this] {
fn(i);
fPending.fetch_add(-1, std::memory_order_release);
});
}
}
void SkTaskGroup::wait() { // Actively help the executor do work until our task group is done. // This lets SkTaskGroups nest arbitrarily deep on a single SkExecutor: // no thread ever blocks waiting for others to do its work. // (We may end up doing work that's not part of our task group. That's fine.) while (!this->done()) {
fExecutor.borrow();
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.