cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// ActivProf.h")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// (C) Copyright 2000 Microsoft Corporation.  All Rights Reserved.")
cpp_quote("//")
cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF")
cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO")
cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A")
cpp_quote("// PARTICULAR PURPOSE.")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("//")
cpp_quote("#pragma comment(lib,\"uuid.lib\")")
cpp_quote("//")
cpp_quote("// Declarations for ActiveX Scripting profiling.")
cpp_quote("//")
cpp_quote("")
cpp_quote("const HRESULT ACTIVPROF_E_PROFILER_PRESENT = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0200);")
cpp_quote("const HRESULT ACTIVPROF_E_PROFILER_ABSENT = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0201);")
cpp_quote("const HRESULT ACTIVPROF_E_UNABLE_TO_APPLY_ACTION = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0202);")
cpp_quote("")
cpp_quote("#ifndef __ActivProf_h")
cpp_quote("#define __ActivProf_h")
cpp_quote("")

import "unknwn.idl";

typedef enum {
	PROFILER_SCRIPT_TYPE_USER,
	PROFILER_SCRIPT_TYPE_DYNAMIC,
	PROFILER_SCRIPT_TYPE_NATIVE
} PROFILER_SCRIPT_TYPE;

typedef enum {
        PROFILER_EVENT_MASK_TRACE_SCRIPT_FUNCTION_CALL = 0x00000001,
        PROFILER_EVENT_MASK_TRACE_NATIVE_FUNCTION_CALL = 0x00000002,
        PROFILER_EVENT_MASK_TRACE_ALL = PROFILER_EVENT_MASK_TRACE_SCRIPT_FUNCTION_CALL |
                                        PROFILER_EVENT_MASK_TRACE_NATIVE_FUNCTION_CALL
} PROFILER_EVENT_MASK;

typedef LONG PROFILER_TOKEN;

[
 object,
 uuid(784b5ff0-69b0-47d1-a7dc-2518f4230e90),
 pointer_default(unique)
]
interface IActiveScriptProfilerControl : IUnknown
{
        HRESULT StartProfiling([in] REFCLSID clsidProfilerObject, 
                               [in] DWORD dwEventMask,
                               [in] DWORD dwContext);
        HRESULT SetProfilerEventMask([in] DWORD dwEventMask);
        HRESULT StopProfiling([in] HRESULT hrShutdownReason);
}

[
 object,
 uuid(740eca23-7d9d-42e5-ba9d-f8b24b1c7a9b),
 pointer_default(unique)
]
interface IActiveScriptProfilerCallback : IUnknown
{
        HRESULT Initialize([in] DWORD dwContext);

        HRESULT Shutdown([in] HRESULT hrReason);

        HRESULT ScriptCompiled([in] PROFILER_TOKEN scriptId,
                               [in] PROFILER_SCRIPT_TYPE type,
                               [in] IUnknown *pIDebugDocumentContext);

        HRESULT FunctionCompiled([in] PROFILER_TOKEN functionId,
                                 [in] PROFILER_TOKEN scriptId,
                                 [in] [string] const WCHAR *pwszFunctionName,
                                 [in] [string] const WCHAR *pwszFunctionNameHint,
                                 [in] IUnknown *pIDebugDocumentContext);

        HRESULT OnFunctionEnter([in] PROFILER_TOKEN scriptId, 
                                [in] PROFILER_TOKEN functionId);

        HRESULT OnFunctionExit([in] PROFILER_TOKEN scriptId, 
                               [in] PROFILER_TOKEN functionId);
};

cpp_quote("")
cpp_quote("#endif  // __ActivProf_h")
cpp_quote("")

