/*------------------------ イニシャライズ -------------------------*/ STDMETHODIMP CFACE::Sound( LONG DSMODE ){ if ( DSMODE == dwSndMode ) return S_OK; // ログに記述 LogBegin( "Sounds Initializer" ); LogPut( CONTINUE , IDS_LOG_MODEOUT , DSMODE ); // ハンドルチェック CHECK_HWND; // グラフィック定数範囲チェック CHECK_RANGE( DSMODE , 0 , 1 ); // 使用しないモード if ( DSMODE == SOUNDDISABLE ) SoundRelease( ); else{ SoundRelease( ); // 全解放 // DirectSound を作成する。 if ( FAILED( DirectSoundCreate( NULL , &ObjDS , NULL ) ) ) DSoundInitFailed; // 協調レベルを設定する if ( FAILED( ObjDS->SetCooperativeLevel( hWnd , DSSCL_NORMAL ) ) ) DSoundInitFailed; // イベントの作成 // at Half, at EndPos , FinallyHandler at Half for ( int i = 0 ; i < 3 ; i++ ) hEvent[ i ] = CreateEvent( NULL , FALSE , FALSE , NULL ); } dwSndMode = (BYTE)DSMODE; LogQuit( ); return S_OK; }
void TracedTask::Run() { SetTLSTraceInfo(); LogBegin(mTaskId, mSourceEventId); mOriginalObj->Run(); LogEnd(mTaskId, mSourceEventId); ClearTLSTraceInfo(); }
NS_IMETHODIMP TracedRunnable::Run() { SetTLSTraceInfo(); LogBegin(mTaskId, mSourceEventId); nsresult rv = mOriginalObj->Run(); LogEnd(mTaskId, mSourceEventId); ClearTLSTraceInfo(); return rv; }
STDMETHODIMP CFACE::fClear( ){ LogBegin( "fClearMethod" ); LogPut( CONTINUE , IDS_LOG_FILEIO , WritingPath ); HANDLE hFile; if ( NULL == ( hFile = CreateFile( WritingPath , GENERIC_WRITE , 0 , NULL , CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL , NULL ) )) LogPut( FATAL , IDS_ERR_INVALIDFILE ); CloseHandle( hFile ); return S_OK; }
STDMETHODIMP CFACE::Snd_Open( LONG BufferID , BSTR FileName ){ USES_CONVERSION; // 開始 LogBegin( _T( "Snd_Open" ) ); //モードチェックと範囲チェック CHECK_MODE( dwSndMode ); CHECK_RANGE_STR( BufferID , 0 , dwBufferNum , "Sound系関数(Snd_Open)->BufferID" ); /* スプライトへのアクセスポインタ -- */ BUFFERS *lpBuffer = &Buffers[ BufferID ]; lpBuffer->Clear( ); /* ファイルへのパスを取得する */ // ログアウト LogPut( CONTINUE , IDS_LOG_LOADFROMFILE , OLE2T( FileName ) , BufferID ); TCHAR FilePath[ MAX_PATH ] , lpFormatStr[ 64 ]; if ( !GetFilePath( OLE2T( FileName ) , FilePath ) ) LogPut( FATAL , IDS_ERR_FILENOTFOUND ); lpBuffer->SndPts = fopen( FilePath , _T( "rb" ) ); // Check OGG Vorbis File? if ( ogg_Open( lpBuffer ) != S_OK ){ // Check WAV File? if ( wav_Open( lpBuffer ) != S_OK ) LogPut( FATAL , IDS_ERR_INVALIDFILE ); else lstrcpy( lpFormatStr , _T( " ** WavFile **" ) ); }else lstrcpy( lpFormatStr , _T(" ** OGGVorbisFile ** " ) ); // SoundBuffer構築構造体を初期化 lpBuffer->Make( BufferID == 0 ); /* Notify定義 */ if ( BufferID == 0 ){ SAFE_RELEASE( Notify ); // DirectSoundNotifyの作成 lpBuffer->SecBuf->QueryInterface( IID_IDirectSoundNotify ,(LPVOID*)&Notify ); DSBPOSITIONNOTIFY pn[3]; pn[0].dwOffset = lpBuffer->WaveFormat.nAvgBytesPerSec * BufferSec - 1; pn[0].hEventNotify = hEvent[ 0 ]; pn[1].dwOffset = lpBuffer->WaveFormat.nAvgBytesPerSec * BufferSec / 2; pn[1].hEventNotify = hEvent[ 1 ]; pn[2].dwOffset = DSBPN_OFFSETSTOP; // 再生停止 pn[2].hEventNotify = hEvent[ 2 ]; Notify->SetNotificationPositions( 3 , pn ); } // ログアウト LogPut( CONTINUE , IDS_LOG_SOUNDINFO , lpFormatStr ); LogQuit( ); return S_OK; }
void CFACE::SoundRelease( ){ if ( dwSndMode == SOUNDDISABLE )return; // イベントハンドルを開放 for ( int i = 0 ; i < 3 ; i++ ){ CloseHandle( hEvent[ i ] ); hEvent[ i ] = NULL; } int j ; for AllBuffers( j ) Buffers[ j ].Clear( ); // DirectSoundの開放 SAFE_RELEASE( Notify ); SAFE_RELEASE( ObjDS ); dwSndMode = SOUNDDISABLE; LogBegin( _T( "Sounds Destraction" ) ); LogQuit( ); }
STDMETHODIMP CFACE::fOpen( BSTR FName ){ USES_CONVERSION; // 書き込みファイル名生成 wsprintf( WritingPath , _T( "%s\\%s.FACEDat" ) , FACEDir , OLE2T( FName ) ); LogBegin( "fOpenMethod" ); LogPut( CONTINUE , IDS_LOG_FILEIO , WritingPath ); // オープン HANDLE hFile; if ( NULL == ( hFile = CreateFile( WritingPath , GENERIC_WRITE , 0 , NULL , OPEN_ALWAYS , FILE_ATTRIBUTE_NORMAL , NULL ) ) ) LogPut( FATAL , IDS_ERR_INVALIDFILE ); CloseHandle( hFile ); return S_OK; }
ArenaAllocatorBase<TFreeListPolicy, ObjectAlignmentBitShiftArg, RequireObjectAlignment, MaxObjectSize>:: ArenaAllocatorBase(__in LPCWSTR name, PageAllocator * pageAllocator, void(*outOfMemoryFunc)(), void(*recoverMemoryFunc)()) : Allocator(outOfMemoryFunc, recoverMemoryFunc), ArenaData(pageAllocator), #ifdef ARENA_ALLOCATOR_FREE_LIST_SIZE freeListSize(0), #endif freeList(nullptr), largestHole(0), cacheBlockEnd(nullptr), blockState(0) { #ifdef PROFILE_MEM this->name = name; LogBegin(); #endif ArenaMemoryTracking::ArenaCreated(this, name); }
static void CreateSourceEvent(SourceEventType aType) { // Save the currently traced source event info. SaveCurTraceInfo(); // Create a new unique task id. uint64_t newId = GenNewUniqueTaskId(); TraceInfo* info = GetOrCreateTraceInfo(); ENSURE_TRUE_VOID(info); info->mCurTraceSourceId = newId; info->mCurTraceSourceType = aType; info->mCurTaskId = newId; uintptr_t* namePtr; #define SOURCE_EVENT_NAME(type) \ case SourceEventType::type: \ { \ static int CreateSourceEvent##type; \ namePtr = (uintptr_t*)&CreateSourceEvent##type; \ break; \ } switch (aType) { #include "SourceEventTypeMap.h" default: MOZ_CRASH("Unknown SourceEvent."); } #undef CREATE_SOURCE_EVENT_NAME // Log a fake dispatch and start for this source event. LogDispatch(newId, newId, newId, aType); LogVirtualTablePtr(newId, newId, namePtr); LogBegin(newId, newId); }
void FakeTracedTask::BeginFakeTracedTask() { LogBegin(mTaskId, mSourceEventId); SetTraceInfo(); }
STDMETHODIMP CFACE::SpriteLoadFromFile( LONG SpriteID , BSTR FileName ){ USES_CONVERSION; // 開始 LogBegin( _T( "SpriteLoadFromFile" ) ); //モードチェックと範囲チェック CHECK_MODE( dwDrawMode ); CHECK_RANGE_STR( SpriteID , 0 , dwSpriteNum , "Draw系関数(DSetColorKey)->Sprite ID" ); // ログアウト LogPut( CONTINUE , IDS_LOG_LOADFROMFILE , OLE2T( FileName ) , SpriteID ); /* スプライトへのアクセスポインタ -- */ SPRITE *lpSprite = &Sprites[ SpriteID ]; lpSprite->Clear( ); /* ファイルへのパスを取得する */ TCHAR FilePath[ MAX_PATH ]; if ( !GetFilePath( OLE2T( FileName ) , FilePath ) ) LogPut( FATAL , IDS_ERR_FILENOTFOUND ); /* 外部ライブラリのロード */ HINSTANCE jpg , png; ISSUPPORTED jpgIsSupported , pngIsSupported; GETPICTURE jpgGetPicture , pngGetPicture ; HBITMAP hBitmap ; GETPICTURE GetFunc = NULL; // 読み込み先 // JPGLibの取り込み if ( jpg = LoadLibrary( _T( "jpegloader." ) ) ){ // 関数ロード jpgIsSupported = (ISSUPPORTED)GetProcAddress( jpg , "IsSupported" ); jpgGetPicture = (GETPICTURE) GetProcAddress( jpg , "GetPicture" ); if (!( jpgIsSupported && jpgGetPicture ) ){ FreeLibrary( jpg ); jpg = NULL; } } // PNGLibの取り込み if ( png = LoadLibrary( _T( "pngloader." ) ) ){ // 関数ロード pngIsSupported = (ISSUPPORTED)GetProcAddress( png , "IsSupported" ); pngGetPicture = (GETPICTURE) GetProcAddress( png , "GetPicture" ); if ( !( pngIsSupported && pngGetPicture ) ){ FreeLibrary( png ); png = NULL; } } // 対応を調べる TCHAR lpFormatStr[ 64 ]; HANDLE hFile = CreateFile( FilePath , GENERIC_READ , FILE_SHARE_READ , NULL , OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL ); // Chk JPG if ( jpg && jpgIsSupported( FilePath , (DWORD)hFile ) ){ GetFunc = jpgGetPicture; lstrcpy( lpFormatStr, _T("Joint Photographic Exports Group(JPEG) Image file") ); }else{ CloseHandle( hFile ); hFile = CreateFile( FilePath , GENERIC_READ , FILE_SHARE_READ , NULL , OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL ); // Chk PNG if ( png && pngIsSupported( FilePath , (DWORD)hFile ) ){ GetFunc = pngGetPicture; lstrcpy( lpFormatStr, _T( "Portable Network Graphics(PNG) Image file" ) ); }else{ CloseHandle( hFile ); // Chk BMP if ( hBitmap = ( HBITMAP )LoadImage( NULL , FilePath , IMAGE_BITMAP , 0 , 0 , LR_LOADFROMFILE | LR_CREATEDIBSECTION ) ) lstrcpy( lpFormatStr, _T( "BITMAP Image file **" ) ); else{ LogPut( FATAL , IDS_ERR_INVALIDFILE ); } } } SIZE Size ; // 幅と高さ情報 if ( GetFunc ){ CloseHandle( hFile ); // ライブラリからロードすることができる HDC DestDC; HANDLE hBitmapInfo , hBitmapBitData; LPBYTE m_pImage; LPBITMAPINFO m_pHDR; GetFunc( FilePath , 0 , 0 , &hBitmapInfo , &hBitmapBitData , ProgressCallback , 0 ); m_pImage = (LPBYTE)LocalLock(hBitmapBitData); m_pHDR = (LPBITMAPINFO)LocalLock(hBitmapInfo); // 情報取得 Size.cx = m_pHDR->bmiHeader.biWidth; Size.cy = m_pHDR->bmiHeader.biHeight; // スプライト作成 lpSprite->Make( Size.cx , Size.cy ); //GDI関数でブロック転送 DestDC = lpSprite->GetSprDC( ); StretchDIBits( DestDC , 0 , 0 , Size.cx , Size.cy , 0 , 0 , Size.cx , Size.cy , m_pImage , m_pHDR , DIB_RGB_COLORS , SRCCOPY ); lpSprite->EndSprDC( DestDC ); /* -- 読み込みに使用したオブジェクトの開放 -- */ LocalUnlock( hBitmapInfo ); LocalUnlock( hBitmapBitData ); LocalFree( m_pHDR ); LocalFree( m_pImage ); if ( png )FreeLibrary( png ); if ( jpg )FreeLibrary( jpg ); }else{ HDC SrcDC , DestDC; BITMAP bmp; //ビットマップヘッダからサイズを取得 GetObject( hBitmap , sizeof( BITMAP ) , ( LPSTR )&bmp ); Size.cx = bmp.bmWidth; Size.cy = bmp.bmHeight; // 空のCompatibleDCを作成後BMPと関連づける SrcDC = CreateCompatibleDC( NULL ); SelectObject( SrcDC , hBitmap ); // スプライト作成 lpSprite->Make( Size.cx, Size.cy ); //GDI関数でブロック転送 DestDC = lpSprite->GetSprDC( ); BitBlt( DestDC , 0 , 0 , Size.cx , Size.cy , SrcDC , 0 , 0 , SRCCOPY ); lpSprite->EndSprDC( DestDC ); // 解放 DeleteObject( hBitmap ); DeleteDC( SrcDC ); } // 幅と高さの書き出し LogPut( CONTINUE , IDS_LOG_IMAGEINFO , lpFormatStr, EXPAND_SIZE( Size ) ); LogQuit( ); // カラーキー適応 DSetColorKey( lpSprite->CLRKey , SpriteID ); return S_OK; }
void VirtualTask::AutoRunTask::StartScope(VirtualTask* aTask) { mTask->SetTLSTraceInfo(); LogBegin(mTask->mTaskId, mTask->mSourceEventId); }
STDMETHODIMP CFACE::Download( BSTR URL, BSTR DownloadFile ){ USES_CONVERSION; HANDLE hFile; TCHAR DownloadTo[ MAX_PATH ] , TXT[ 256 ] ; HWND hDialog; LogBegin( "File Download Method" ); LogPut( CONTINUE , IDS_LOG_DOWNLOAD , URL ); // ユーザーフォルダ名を取得 // ダイアログの作成 hDialog = CreateDialog( hInst ,MAKEINTRESOURCE( IDD_DownLoading ) , hWnd , (DLGPROC)DownLoadProc ); wsprintf( TXT , _T( "%s \nDown To : %s " ) , OLE2T( URL ) , OLE2T( DownloadFile ) ); SetWindowText( GetDlgItem( hDialog , IDC_Down ) ,TXT ); // そこに、ファイル名を追加することで、ダウンロード先の完成 wsprintf( DownloadTo , _T( "%s\\%s" ) , FACEDir , OLE2T( DownloadFile ) ); // ダウンロードを行う関数をロード DWORD dwBytesWrite , dwBytesRead , dwBytesAvailable , dwTotalRead = 0; BYTE *Buffer; // DLL関数初期化 HANDLE hInternet = InternetOpen( _T( "FACE Download Method" ) , INTERNET_OPEN_TYPE_PRECONFIG , NULL , NULL , 0 ) , hInternetFile = InternetOpenUrl( hInternet , OLE2T( URL ) , NULL , 0 ,0 , 0 ); LogPut( CONTINUE , IDS_LOG_DOWNLOAD , OLE2T( URL ) ); if ( hInternet == NULL || hInternetFile == NULL ) LogPut( FATAL , IDS_ERR_CANTDOWNLOAD ); // 最適サイズ取得 InternetQueryDataAvailable( hInternetFile , &dwBytesAvailable, 0, 0 ); Buffer = (BYTE*)malloc( dwBytesAvailable + 1 ); // タイムアウト設定 DWORD TimeOut; TimeOut = 30 * 1000; // ここでは30秒に指定しています。 InternetSetOption( hInternetFile, INTERNET_OPTION_RECEIVE_TIMEOUT, &TimeOut, sizeof(TimeOut) ); // インターネットファイルの更新日時をクエリー SYSTEMTIME LastModified; dwBytesRead = sizeof(LastModified); HttpQueryInfo( hInternetFile , HTTP_QUERY_LAST_MODIFIED | HTTP_QUERY_FLAG_SYSTEMTIME , &LastModified , &dwBytesRead , 0 ); // ファイルがすでにある場合は更新日時をチェック if ( ( hFile = CreateFile( DownloadTo , GENERIC_WRITE , 0 , NULL , OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL ) ) != INVALID_HANDLE_VALUE ){ // 更新日時の比較 FILETIME ft2,ft1; SystemTimeToFileTime( &LastModified , &ft2 ); FileTimeToLocalFileTime( &ft2 , &ft1 ); GetFileTime( hFile , NULL , NULL , &ft2 ); CloseHandle( hFile ); } hFile = CreateFile( DownloadTo , GENERIC_WRITE , 0 , NULL , CREATE_ALWAYS , FILE_ATTRIBUTE_NORMAL , NULL ); LONG x = -40 , ax = 1; // Progressing do{ ZeroMemory( Buffer , sizeof(Buffer) ); // ダウンロード InternetReadFile( hInternetFile , Buffer , dwBytesAvailable , &dwBytesRead ); sprintf( TXT , _T( " 最適レート / 実ダウン : %d / %d Bytes" ) , dwBytesAvailable , dwBytesRead ); SetWindowText( GetDlgItem( hDialog , IDC_Down3 ) , TXT ); /* -- ダウンロード総容量の表示 -- */ dwTotalRead += dwBytesRead; if ( dwTotalRead < 1000000 ) sprintf( TXT , _T( " ダウンロード済みサイズ : %.3g KBytes" ) , (double)dwTotalRead / 1024 ); else sprintf( TXT , _T( " ダウンロード済みサイズ : %.3g MBytes " ) , (double)dwTotalRead / 1024 / 1024 ); SetWindowText( GetDlgItem( hDialog , IDC_Down2 ) , TXT ); // ダウンロード進行を示す プログレス x += ax; HDC hDC = GetDC( GetDlgItem( hDialog , IDC_PROGRESS1 ) ); RECT RT ; GetClientRect( GetDlgItem( hDialog , IDC_PROGRESS1 ) , &RT ); if ( x < RT.left- 40 || x > RT.right + 30 ) ax *= -1; FillRect( hDC , &RT , (HBRUSH)( COLOR_BTNFACE + 1 ) ); SetRect( &RT, x , 0 , x + 30 , 10 ); FillRect( hDC , &RT , (HBRUSH)( COLOR_ACTIVECAPTION + 1 ) ); ReleaseDC( GetDlgItem( hDialog , IDC_PROGRESS1 ) , hDC ); Buffer [ dwBytesRead ] = 0; WriteFile( hFile , Buffer , dwBytesRead , &dwBytesWrite , NULL ); BOOL END; DoEvents( &END );if (END)break; }while ( dwBytesRead > 0 ); InternetCloseHandle( hInternetFile ); InternetCloseHandle( hInternet ); CloseHandle( hFile ); DestroyWindow( hDialog ); LogQuit( ); return S_OK; }