15dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy/*
25dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy * Copyright (C) 2013 The Android Open Source Project
35dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy *
45dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy * Licensed under the Apache License, Version 2.0 (the "License");
55dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy * you may not use this file except in compliance with the License.
65dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy * You may obtain a copy of the License at
75dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy *
85dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy *      http://www.apache.org/licenses/LICENSE-2.0
95dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy *
105dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy * Unless required by applicable law or agreed to in writing, software
115dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy * distributed under the License is distributed on an "AS IS" BASIS,
125dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy * See the License for the specific language governing permissions and
145dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy * limitations under the License.
155dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy */
165dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy
175dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy#ifndef ANDROID_HWUI_TASK_H
185dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy#define ANDROID_HWUI_TASK_H
195dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy
205dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy#include <utils/RefBase.h>
215dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy#include <utils/Trace.h>
225dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy
235dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy#include "Future.h"
245dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy
255dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guynamespace android {
265dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guynamespace uirenderer {
275dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy
285dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guyclass TaskBase: public RefBase {
295dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guypublic:
305dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy    TaskBase() { }
315dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy    virtual ~TaskBase() { }
325dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy};
335dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy
345dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guytemplate<typename T>
355dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guyclass Task: public TaskBase {
365dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guypublic:
375dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy    Task(): mFuture(new Future<T>()) { }
385dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy    virtual ~Task() { }
395dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy
405dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy    T getResult() const {
415dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy        return mFuture->get();
425dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy    }
435dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy
445dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy    void setResult(T result) {
455dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy        mFuture->produce(result);
465dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy    }
475dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy
485dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guyprotected:
495dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy    const sp<Future<T> >& future() const {
505dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy        return mFuture;
515dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy    }
525dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy
535dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guyprivate:
545dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy    sp<Future<T> > mFuture;
555dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy};
565dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy
575dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy}; // namespace uirenderer
585dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy}; // namespace android
595dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy
605dc7fa709646799a5207a5d217f70aa02bf4a3aaRomain Guy#endif // ANDROID_HWUI_TASK_H
61