1/* 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 * 25 */ 26 27#include "config.h" 28#include "ThreadGlobalData.h" 29 30#include "CachedResourceRequestInitiators.h" 31#include "EventNames.h" 32#include "InspectorCounters.h" 33#include "ThreadTimers.h" 34#include <wtf/MainThread.h> 35#include <wtf/WTFThreadData.h> 36#include <wtf/text/StringImpl.h> 37 38#if USE(ICU_UNICODE) 39#include "TextCodecICU.h" 40#endif 41 42#if PLATFORM(MAC) 43#include "TextCodecMac.h" 44#endif 45 46#if ENABLE(WORKERS) 47#include <wtf/Threading.h> 48#include <wtf/ThreadSpecific.h> 49using namespace WTF; 50#endif 51 52namespace WebCore { 53 54#if ENABLE(WORKERS) 55ThreadSpecific<ThreadGlobalData>* ThreadGlobalData::staticData; 56#else 57ThreadGlobalData* ThreadGlobalData::staticData; 58#endif 59 60ThreadGlobalData::ThreadGlobalData() 61 : m_cachedResourceRequestInitiators(adoptPtr(new CachedResourceRequestInitiators)) 62 , m_eventNames(adoptPtr(new EventNames)) 63 , m_threadTimers(adoptPtr(new ThreadTimers)) 64#ifndef NDEBUG 65 , m_isMainThread(isMainThread()) 66#endif 67#if USE(ICU_UNICODE) 68 , m_cachedConverterICU(adoptPtr(new ICUConverterWrapper)) 69#endif 70#if PLATFORM(MAC) 71 , m_cachedConverterTEC(adoptPtr(new TECConverterWrapper)) 72#endif 73#if ENABLE(INSPECTOR) 74 , m_inspectorCounters(adoptPtr(new ThreadLocalInspectorCounters())) 75#endif 76{ 77 // This constructor will have been called on the main thread before being called on 78 // any other thread, and is only called once per thread - this makes this a convenient 79 // point to call methods that internally perform a one-time initialization that is not 80 // threadsafe. 81 wtfThreadData(); 82 StringImpl::empty(); 83} 84 85ThreadGlobalData::~ThreadGlobalData() 86{ 87} 88 89void ThreadGlobalData::destroy() 90{ 91#if PLATFORM(MAC) 92 m_cachedConverterTEC.clear(); 93#endif 94 95#if USE(ICU_UNICODE) 96 m_cachedConverterICU.clear(); 97#endif 98 99#if ENABLE(INSPECTOR) 100 m_inspectorCounters.clear(); 101#endif 102 103 m_eventNames.clear(); 104 m_threadTimers.clear(); 105} 106 107} // namespace WebCore 108