
/*
 * weinre is available under *either* the terms of the modified BSD license *or* the
 * MIT License (2008). See http://opensource.org/licenses/alphabetical for full text.
 * 
 * Copyright (c) 2011 IBM Corporation
 */

requireClass ../common/Weinre

//-----------------------------------------------------------------------------
class WiProfilerImpl

//-----------------------------------------------------------------------------
method getProfileHeaders(callback)
    // callback: function(/*any[]*/ headers)
    Weinre.notImplemented(arguments.callee.signature)

//-----------------------------------------------------------------------------
method getProfile(/*string*/ type, /*int*/ uid, callback)
    // callback: function(/*any*/ profile)
    Weinre.notImplemented(arguments.callee.signature)

//-----------------------------------------------------------------------------
method removeProfile(/*string*/ type, /*int*/ uid, callback)
    // callback: function()
    Weinre.notImplemented(arguments.callee.signature)

//-----------------------------------------------------------------------------
method clearProfiles(callback)
    // callback: function()
    Weinre.notImplemented(arguments.callee.signature)

//-----------------------------------------------------------------------------
method takeHeapSnapshot(/*boolean*/ detailed, callback)
    // callback: function()
    Weinre.notImplemented(arguments.callee.signature)
