• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright (C) 2010 The Android Open Source Project
3   *
4   * Licensed under the Apache License, Version 2.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   *
8   *      http://www.apache.org/licenses/LICENSE-2.0
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  /* 3DCommit implementation */
18  
19  #include "sles_allinclusive.h"
20  
21  
I3DCommit_Commit(SL3DCommitItf self)22  static SLresult I3DCommit_Commit(SL3DCommitItf self)
23  {
24      SL_ENTER_INTERFACE
25  
26      I3DCommit *thiz = (I3DCommit *) self;
27      IObject *thisObject = InterfaceToIObject(thiz);
28      object_lock_exclusive(thisObject);
29      if (thiz->mDeferred) {
30          SLuint32 myGeneration = thiz->mGeneration;
31          do {
32              ++thiz->mWaiting;
33              object_cond_wait(thisObject);
34          } while (thiz->mGeneration == myGeneration);
35      }
36      object_unlock_exclusive(thisObject);
37      result = SL_RESULT_SUCCESS;
38  
39      SL_LEAVE_INTERFACE
40  }
41  
42  
I3DCommit_SetDeferred(SL3DCommitItf self,SLboolean deferred)43  static SLresult I3DCommit_SetDeferred(SL3DCommitItf self, SLboolean deferred)
44  {
45      SL_ENTER_INTERFACE
46  
47      I3DCommit *thiz = (I3DCommit *) self;
48      IObject *thisObject = InterfaceToIObject(thiz);
49      object_lock_exclusive(thisObject);
50      thiz->mDeferred = SL_BOOLEAN_FALSE != deferred; // normalize
51      object_unlock_exclusive(thisObject);
52      result = SL_RESULT_SUCCESS;
53  
54      SL_LEAVE_INTERFACE
55  }
56  
57  
58  static const struct SL3DCommitItf_ I3DCommit_Itf = {
59      I3DCommit_Commit,
60      I3DCommit_SetDeferred
61  };
62  
I3DCommit_init(void * self)63  void I3DCommit_init(void *self)
64  {
65      I3DCommit *thiz = (I3DCommit *) self;
66      thiz->mItf = &I3DCommit_Itf;
67      thiz->mDeferred = SL_BOOLEAN_FALSE;
68      thiz->mGeneration = 0;
69      thiz->mWaiting = 0;
70  }
71