104#ifdef FILTER_THREAD
105bool FilterEffect::execute(WTF::ThreadFunction function, void* parameter)
106{
107 if (!s_threadShared)
108 return false;
109
110 ASSERT(!s_threadShared->m_start && !s_threadShared->m_finish);
111
112 MutexLocker lock(s_threadShared->m_mutex);
113 s_threadShared->m_function = function;
114 s_threadShared->m_parameter = parameter;
115 s_threadShared->m_start = true;
116 s_threadShared->m_cond.signal();
117 return true;
118}
119
120void FilterEffect::waitForFinish()
121{
122 ASSERT(s_threadShared);
123
124 while (!s_threadShared->m_finish)
125 s_threadShared->m_cond.wait(s_threadShared->m_mutex);
126
127 s_threadShared->m_finish = false;
128}
129
130void* FilterEffect::filterThread(void*)
131{
132 while (!s_stopThread) {
133 if (s_threadShared->m_start) {
134 s_threadShared->m_function(s_threadShared->m_parameter);
135
136 MutexLocker lock(s_threadShared->m_mutex);
137 s_threadShared->m_start = false;
138 s_threadShared->m_finish = true;
139 s_threadShared->m_cond.signal();
140 }
141 s_threadShared->m_cond.wait(s_threadShared->m_mutex);
142 }
143 s_stopThread = false;
144 return 0;
145}
146#endif
147