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