rsThreadIO.cpp revision a9e7a05b84470257637c97d65f6562aa832c66ef
1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/*
2d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Copyright (C) 2009 The Android Open Source Project
3d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * you may not use this file except in compliance with the License.
6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * You may obtain a copy of the License at
7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
8d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Unless required by applicable law or agreed to in writing, software
11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * See the License for the specific language governing permissions and
14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * limitations under the License.
15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams */
16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
17d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsContext.h"
18d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsThreadIO.h"
20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
21d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android;
22d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android::renderscript;
23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
24d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsThreadIO::ThreadIO()
25d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
26d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    mToCore.init(16 * 1024);
27d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
28d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
29d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsThreadIO::~ThreadIO()
30d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
31d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
32d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
33f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Samsvoid ThreadIO::shutdown()
34f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams{
35f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams    mToCore.shutdown();
36f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams}
37f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams
385f7fc27dce3f0ea0ce7532ee8ecd8a2cd01ec47bJason Samsbool ThreadIO::playCoreCommands(Context *con, bool waitForCommand)
39d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
40a09f11d6c641726b61f80c15230a18d31c146fecJason Sams    bool ret = false;
415f7fc27dce3f0ea0ce7532ee8ecd8a2cd01ec47bJason Sams    while(!mToCore.isEmpty() || waitForCommand) {
42f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams        uint32_t cmdID = 0;
43f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams        uint32_t cmdSize = 0;
44a09f11d6c641726b61f80c15230a18d31c146fecJason Sams        ret = true;
459ac2c66f0171593113238635c6a7921c41215e77Joe Onorato        if (con->logTimes) {
469ac2c66f0171593113238635c6a7921c41215e77Joe Onorato            con->timerSet(Context::RS_TIMER_IDLE);
479ac2c66f0171593113238635c6a7921c41215e77Joe Onorato        }
48d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        const void * data = mToCore.get(&cmdID, &cmdSize);
49a9e7a05b84470257637c97d65f6562aa832c66efJason Sams        if (!cmdSize) {
50a9e7a05b84470257637c97d65f6562aa832c66efJason Sams            // exception occured, probably shutdown.
51a9e7a05b84470257637c97d65f6562aa832c66efJason Sams            return false;
52a9e7a05b84470257637c97d65f6562aa832c66efJason Sams        }
539ac2c66f0171593113238635c6a7921c41215e77Joe Onorato        if (con->logTimes) {
549ac2c66f0171593113238635c6a7921c41215e77Joe Onorato            con->timerSet(Context::RS_TIMER_INTERNAL);
559ac2c66f0171593113238635c6a7921c41215e77Joe Onorato        }
565f7fc27dce3f0ea0ce7532ee8ecd8a2cd01ec47bJason Sams        waitForCommand = false;
57f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams        //LOGV("playCoreCommands 3 %i %i", cmdID, cmdSize);
58d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
59d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        gPlaybackFuncs[cmdID](con, data);
60d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        mToCore.next();
61d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
62a09f11d6c641726b61f80c15230a18d31c146fecJason Sams    return ret;
63d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
64d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
65d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
66