This is a very basic implementation of a library that easily allows to drive LLDB.framework to write test cases for performance This is separate from the LLDB testsuite in test/ in that: a) this uses C++ instead of Python to avoid measures being affected by SWIG b) this is in very early development and needs lots of tweaking before it can be considered functionally complete c) this is not meant to test correctness but to help catch performance regressions There is a sample application built against the library (in darwin/sketch) that uses the famous sample app Sketch as an inferior to measure certain basic parameters of LLDB's behavior. The resulting output is a PLIST much like the following: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <array> <dict> <key>fetch-frames</key> <real>0.13161715522222225</real> </dict> <dict> <key>file-line-bkpt</key> <real>0.029111678750000002</real> </dict> <dict> <key>fetch-modules</key> <real>0.00026376766666666668</real> </dict> <dict> <key>fetch-vars</key> <real>0.17820429311111111</real> </dict> <dict> <key>run-expr</key> <real>0.029676525769230768</real> </dict> </array> </plist> Areas for improvement: - code cleanups (I will be out of the office for a couple days this coming week, but please keep ideas coming!) - more metrics and test cases - better error checking This toolkit also comprises a simple event-loop-driven controller for LLDB, similar yet much simpler to what the Driver does to implement the lldb command-line tool. llvm-svn: 176715
80 lines
3.9 KiB
C++
80 lines
3.9 KiB
C++
//===-- CFCMutableDictionary.h ----------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef CoreFoundationCPP_CFMutableDictionary_h_
|
|
#define CoreFoundationCPP_CFMutableDictionary_h_
|
|
|
|
#include "CFCReleaser.h"
|
|
|
|
class CFCMutableDictionary : public CFCReleaser<CFMutableDictionaryRef>
|
|
{
|
|
public:
|
|
//------------------------------------------------------------------
|
|
// Constructors and Destructors
|
|
//------------------------------------------------------------------
|
|
CFCMutableDictionary(CFMutableDictionaryRef s = NULL);
|
|
CFCMutableDictionary(const CFCMutableDictionary& rhs);
|
|
virtual ~CFCMutableDictionary();
|
|
|
|
//------------------------------------------------------------------
|
|
// Operators
|
|
//------------------------------------------------------------------
|
|
const CFCMutableDictionary&
|
|
operator=(const CFCMutableDictionary& rhs);
|
|
|
|
|
|
CFIndex GetCount() const;
|
|
CFIndex GetCountOfKey(const void *value) const;
|
|
CFIndex GetCountOfValue(const void *value) const;
|
|
void GetKeysAndValues(const void **keys, const void **values) const;
|
|
const void * GetValue(const void *key) const;
|
|
Boolean GetValueIfPresent(const void *key, const void **value_handle) const;
|
|
bool AddValue(CFStringRef key, const void *value, bool can_create = false);
|
|
bool SetValue(CFStringRef key, const void *value, bool can_create = false);
|
|
bool AddValueSInt8(CFStringRef key, int8_t value, bool can_create = false);
|
|
bool SetValueSInt8(CFStringRef key, int8_t value, bool can_create = false);
|
|
bool AddValueSInt16(CFStringRef key, int16_t value, bool can_create = false);
|
|
bool SetValueSInt16(CFStringRef key, int16_t value, bool can_create = false);
|
|
bool AddValueSInt32(CFStringRef key, int32_t value, bool can_create = false);
|
|
bool SetValueSInt32(CFStringRef key, int32_t value, bool can_create = false);
|
|
bool AddValueSInt64(CFStringRef key, int64_t value, bool can_create = false);
|
|
bool SetValueSInt64(CFStringRef key, int64_t value, bool can_create = false);
|
|
bool AddValueUInt8(CFStringRef key, uint8_t value, bool can_create = false);
|
|
bool SetValueUInt8(CFStringRef key, uint8_t value, bool can_create = false);
|
|
bool AddValueUInt16(CFStringRef key, uint16_t value, bool can_create = false);
|
|
bool SetValueUInt16(CFStringRef key, uint16_t value, bool can_create = false);
|
|
bool AddValueUInt32(CFStringRef key, uint32_t value, bool can_create = false);
|
|
bool SetValueUInt32(CFStringRef key, uint32_t value, bool can_create = false);
|
|
bool AddValueUInt64(CFStringRef key, uint64_t value, bool can_create = false);
|
|
bool SetValueUInt64(CFStringRef key, uint64_t value, bool can_create = false);
|
|
bool AddValueDouble(CFStringRef key, double value, bool can_create = false);
|
|
bool SetValueDouble(CFStringRef key, double value, bool can_create = false);
|
|
bool AddValueCString(CFStringRef key, const char *cstr, bool can_create = false);
|
|
bool SetValueCString(CFStringRef key, const char *cstr, bool can_create = false);
|
|
void RemoveValue(const void *value);
|
|
void ReplaceValue(const void *key, const void *value);
|
|
void RemoveAllValues();
|
|
CFMutableDictionaryRef Dictionary(bool can_create);
|
|
|
|
|
|
protected:
|
|
//------------------------------------------------------------------
|
|
// Classes that inherit from CFCMutableDictionary can see and modify these
|
|
//------------------------------------------------------------------
|
|
|
|
private:
|
|
//------------------------------------------------------------------
|
|
// For CFCMutableDictionary only
|
|
//------------------------------------------------------------------
|
|
|
|
};
|
|
|
|
|
|
#endif // CoreFoundationCPP_CFMutableDictionary_h_
|