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);
27516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    mToClient.init(1024);
28d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
29d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
30d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsThreadIO::~ThreadIO()
31d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
32d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
34f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Samsvoid ThreadIO::shutdown()
35f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams{
36f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams    mToCore.shutdown();
37f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams}
38f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams
395f7fc27dce3f0ea0ce7532ee8ecd8a2cd01ec47bJason Samsbool ThreadIO::playCoreCommands(Context *con, bool waitForCommand)
40d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
41a09f11d6c641726b61f80c15230a18d31c146fecJason Sams    bool ret = false;
425f7fc27dce3f0ea0ce7532ee8ecd8a2cd01ec47bJason Sams    while(!mToCore.isEmpty() || waitForCommand) {
43f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams        uint32_t cmdID = 0;
44f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams        uint32_t cmdSize = 0;
45a09f11d6c641726b61f80c15230a18d31c146fecJason Sams        ret = true;
4666b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams        if (con->props.mLogTimes) {
479ac2c66f0171593113238635c6a7921c41215e77Joe Onorato            con->timerSet(Context::RS_TIMER_IDLE);
489ac2c66f0171593113238635c6a7921c41215e77Joe Onorato        }
49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        const void * data = mToCore.get(&cmdID, &cmdSize);
50a9e7a05b84470257637c97d65f6562aa832c66efJason Sams        if (!cmdSize) {
51a9e7a05b84470257637c97d65f6562aa832c66efJason Sams            // exception occured, probably shutdown.
52a9e7a05b84470257637c97d65f6562aa832c66efJason Sams            return false;
53a9e7a05b84470257637c97d65f6562aa832c66efJason Sams        }
5466b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams        if (con->props.mLogTimes) {
559ac2c66f0171593113238635c6a7921c41215e77Joe Onorato            con->timerSet(Context::RS_TIMER_INTERNAL);
569ac2c66f0171593113238635c6a7921c41215e77Joe Onorato        }
575f7fc27dce3f0ea0ce7532ee8ecd8a2cd01ec47bJason Sams        waitForCommand = false;
58f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams        //LOGV("playCoreCommands 3 %i %i", cmdID, cmdSize);
59d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
60d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        gPlaybackFuncs[cmdID](con, data);
61d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        mToCore.next();
62d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
63a09f11d6c641726b61f80c15230a18d31c146fecJason Sams    return ret;
64d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
65d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
66d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
67