~ubuntu-branches/ubuntu/karmic/gears/karmic

« back to all changes in this revision

Viewing changes to third_party/skia/src/core/SkGlobals.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Stefan Lesicnik
  • Date: 2009-04-30 19:15:25 UTC
  • Revision ID: james.westby@ubuntu.com-20090430191525-0790sb5wzg8ou0xb
Tags: upstream-0.5.21.0~svn3334+dfsg
ImportĀ upstreamĀ versionĀ 0.5.21.0~svn3334+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* libs/graphics/sgl/SkGlobals.cpp
 
2
**
 
3
** Copyright 2006, The Android Open Source Project
 
4
**
 
5
** Licensed under the Apache License, Version 2.0 (the "License"); 
 
6
** you may not use this file except in compliance with the License. 
 
7
** You may obtain a copy of the License at 
 
8
**
 
9
**     http://www.apache.org/licenses/LICENSE-2.0 
 
10
**
 
11
** Unless required by applicable law or agreed to in writing, software 
 
12
** distributed under the License is distributed on an "AS IS" BASIS, 
 
13
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 
14
** See the License for the specific language governing permissions and 
 
15
** limitations under the License.
 
16
*/
 
17
 
 
18
#include "SkGlobals.h"
 
19
#include "SkThread.h"
 
20
 
 
21
SkGlobals::Rec::~Rec()
 
22
{
 
23
}
 
24
 
 
25
SkGlobals::Rec* SkGlobals::Find(uint32_t tag, Rec* (*create_proc)())
 
26
{
 
27
    SkGlobals::BootStrap&   bootstrap = SkGlobals::GetBootStrap();
 
28
 
 
29
    Rec* rec = bootstrap.fHead;
 
30
    while (rec)
 
31
    {
 
32
        if (rec->fTag == tag)
 
33
            return rec;
 
34
        rec = rec->fNext;
 
35
    }
 
36
 
 
37
    if (create_proc == NULL) // no create proc, just return not found
 
38
        return NULL;
 
39
 
 
40
    // if we get here, we may need to create one. First grab the mutex, and
 
41
    // search again, creating one if its not found the 2nd time.
 
42
 
 
43
    bootstrap.fMutex.acquire();
 
44
 
 
45
    // search again, now that we have the mutex. Odds are it won't be there, but we check again
 
46
    // just in case it was added by another thread before we grabbed the mutex
 
47
 
 
48
    Rec*& head = bootstrap.fHead;
 
49
    rec = head;
 
50
    while (rec)
 
51
    {
 
52
        if (rec->fTag == tag)
 
53
            break;
 
54
        rec = rec->fNext;
 
55
    }
 
56
 
 
57
    if (rec == NULL && (rec = create_proc()) != NULL)
 
58
    {
 
59
        rec->fTag = tag;
 
60
        rec->fNext = head;
 
61
        bootstrap.fHead = rec;
 
62
    }
 
63
 
 
64
    bootstrap.fMutex.release();
 
65
    return rec;
 
66
}
 
67
 
 
68
void SkGlobals::Init()
 
69
{
 
70
}
 
71
 
 
72
void SkGlobals::Term()
 
73
{
 
74
    SkGlobals::BootStrap&   bootstrap = SkGlobals::GetBootStrap();
 
75
 
 
76
    bootstrap.fMutex.acquire();
 
77
 
 
78
    Rec*&   head = bootstrap.fHead;
 
79
    Rec*    rec = head;
 
80
 
 
81
    while (rec)
 
82
    {
 
83
        Rec* next = rec->fNext;
 
84
        SkDELETE(rec);
 
85
        rec = next;
 
86
    }
 
87
 
 
88
    bootstrap.fHead = NULL;
 
89
    bootstrap.fMutex.release();
 
90
}
 
91
 
 
92