rsThreadIO.cpp revision 1fddd90849deaae89b546ff492c345d485bbce42
1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/*
2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Copyright (C) 2009 The Android Open Source Project
3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams *
4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * you may not use this file except in compliance with the License.
6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * You may obtain a copy of the License at
7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams *
8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams *
10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Unless required by applicable law or agreed to in writing, software
11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * See the License for the specific language governing permissions and
14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * limitations under the License.
15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */
16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsContext.h"
18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsThreadIO.h"
20326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
21326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android;
22326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android::renderscript;
23326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
24326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsThreadIO::ThreadIO()
25326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mToCore.init(16 * 1024);
27326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
29326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsThreadIO::~ThreadIO()
30326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
338c0ee6567b3c874dd472843eb7918ae68d1b9739Jason Samsvoid ThreadIO::shutdown()
348c0ee6567b3c874dd472843eb7918ae68d1b9739Jason Sams{
358c0ee6567b3c874dd472843eb7918ae68d1b9739Jason Sams    mToCore.shutdown();
368c0ee6567b3c874dd472843eb7918ae68d1b9739Jason Sams}
378c0ee6567b3c874dd472843eb7918ae68d1b9739Jason Sams
38732f1c0a29cc468ea271ca3bd654239a0a973fd5Jason Samsbool ThreadIO::playCoreCommands(Context *con, bool waitForCommand)
39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
40a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams    bool ret = false;
41732f1c0a29cc468ea271ca3bd654239a0a973fd5Jason Sams    while(!mToCore.isEmpty() || waitForCommand) {
4224371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams        uint32_t cmdID = 0;
4324371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams        uint32_t cmdSize = 0;
44a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams        ret = true;
451fddd90849deaae89b546ff492c345d485bbce42Jason Sams        if (con->props.mLogTimes) {
4676371fff76412fd020e24ddb8bf1ddb5c75f0ed1Joe Onorato            con->timerSet(Context::RS_TIMER_IDLE);
4776371fff76412fd020e24ddb8bf1ddb5c75f0ed1Joe Onorato        }
48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        const void * data = mToCore.get(&cmdID, &cmdSize);
49e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams        if (!cmdSize) {
50e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams            // exception occured, probably shutdown.
51e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams            return false;
52e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams        }
531fddd90849deaae89b546ff492c345d485bbce42Jason Sams        if (con->props.mLogTimes) {
5476371fff76412fd020e24ddb8bf1ddb5c75f0ed1Joe Onorato            con->timerSet(Context::RS_TIMER_INTERNAL);
5576371fff76412fd020e24ddb8bf1ddb5c75f0ed1Joe Onorato        }
56732f1c0a29cc468ea271ca3bd654239a0a973fd5Jason Sams        waitForCommand = false;
57992a0b70d8fd7a14f0c57bc3c7e16c1f269a6609Jason Sams        //LOGV("playCoreCommands 3 %i %i", cmdID, cmdSize);
58326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
59326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        gPlaybackFuncs[cmdID](con, data);
60326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mToCore.next();
61326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
62a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams    return ret;
63326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
64326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
65326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
66