mirror of
https://github.com/gnustep/libs-performance.git
synced 2025-02-20 18:32:04 +00:00
improve configurability
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/performance/trunk@34057 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
8a5867051c
commit
bdd2b7ce2c
4 changed files with 68 additions and 9 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2011-10-25 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
|
* GSFIFO.h:
|
||||||
|
* GSFIFO.m:
|
||||||
|
Add new method to create a named FIFO and configure it from the
|
||||||
|
defaults system.
|
||||||
|
* GNUmakefile: bump version to 0.3.2
|
||||||
|
|
||||||
2011-08-29 Richard Frith-Macdonald <rfm@gnu.org>
|
2011-08-29 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
* GSCache.m: Try to fool clang/llvm to avoid useless warning/error.
|
* GSCache.m: Try to fool clang/llvm to avoid useless warning/error.
|
||||||
|
|
|
@ -21,7 +21,7 @@ include $(GNUSTEP_MAKEFILES)/common.make
|
||||||
-include config.make
|
-include config.make
|
||||||
|
|
||||||
PACKAGE_NAME = Performance
|
PACKAGE_NAME = Performance
|
||||||
PACKAGE_VERSION = 0.3.1
|
PACKAGE_VERSION = 0.3.2
|
||||||
Performance_INTERFACE_VERSION=0.3
|
Performance_INTERFACE_VERSION=0.3
|
||||||
SVN_BASE_URL = svn+ssh://svn.gna.org/svn/gnustep/libs
|
SVN_BASE_URL = svn+ssh://svn.gna.org/svn/gnustep/libs
|
||||||
SVN_MODULE_NAME = performance
|
SVN_MODULE_NAME = performance
|
||||||
|
|
25
GSFIFO.h
25
GSFIFO.h
|
@ -57,6 +57,9 @@
|
||||||
* cases it may make sense to have multiple consumers and/or producers.
|
* cases it may make sense to have multiple consumers and/or producers.
|
||||||
* In these cases, some locking is required and the use of the inline
|
* In these cases, some locking is required and the use of the inline
|
||||||
* functions is not allowed (you must call the -get and -put: methods.<br />
|
* functions is not allowed (you must call the -get and -put: methods.<br />
|
||||||
|
* It is recommended that you create FIFOs using the -initWithName: method
|
||||||
|
* so that you can easily use the NSUserDefaults system to adjust their
|
||||||
|
* configurations to tests/tweak performance.
|
||||||
*/
|
*/
|
||||||
@interface GSFIFO : NSObject
|
@interface GSFIFO : NSObject
|
||||||
{
|
{
|
||||||
|
@ -119,6 +122,8 @@
|
||||||
|
|
||||||
/** <init/>
|
/** <init/>
|
||||||
* Initialises the receiver with the specified capacity (buffer size).<br />
|
* Initialises the receiver with the specified capacity (buffer size).<br />
|
||||||
|
* The capacity must lie in the range from one to a million, othewrwise
|
||||||
|
* the receiver is deallocated and this method returns nil.<br />
|
||||||
* If the granularity value is non-zero, it is treated as the maximum time
|
* If the granularity value is non-zero, it is treated as the maximum time
|
||||||
* in milliseconds for which a -get or -put: operation will pause between
|
* in milliseconds for which a -get or -put: operation will pause between
|
||||||
* successive attempts.<br />
|
* successive attempts.<br />
|
||||||
|
@ -134,7 +139,8 @@
|
||||||
* If this is nil, a default set of bundaries is used. If it is an empty
|
* If this is nil, a default set of bundaries is used. If it is an empty
|
||||||
* array then no time based stats are recorded.<br />
|
* array then no time based stats are recorded.<br />
|
||||||
* The name string is a unique identifier for the receiver and is used when
|
* The name string is a unique identifier for the receiver and is used when
|
||||||
* printing diagnostics and statistics.
|
* printing diagnostics and statistics. If an instance with the same name
|
||||||
|
* already exists, the receiveris deallocated and an exception is raised.
|
||||||
*/
|
*/
|
||||||
- (id) initWithCapacity: (uint32_t)c
|
- (id) initWithCapacity: (uint32_t)c
|
||||||
granularity: (uint16_t)g
|
granularity: (uint16_t)g
|
||||||
|
@ -145,11 +151,26 @@
|
||||||
name: (NSString*)n;
|
name: (NSString*)n;
|
||||||
|
|
||||||
/** Initialises the receiver as a multi-producer, multi-consumer FIFO with
|
/** Initialises the receiver as a multi-producer, multi-consumer FIFO with
|
||||||
* no timeout and with default stats gathering enabled.
|
* no timeout and with default stats gathering enabled.<br />
|
||||||
|
* However, these values (including the supplied capacity) may be overridden
|
||||||
|
* as specified in -initWithName:
|
||||||
*/
|
*/
|
||||||
- (id) initWithCapacity: (uint32_t)c
|
- (id) initWithCapacity: (uint32_t)c
|
||||||
name: (NSString*)n;
|
name: (NSString*)n;
|
||||||
|
|
||||||
|
/** Initialises the receiver using the specified name and obtaining other
|
||||||
|
* details from the NSUserDefaults system using defaults keys where 'NNN'
|
||||||
|
* is the supplied name.<br />
|
||||||
|
* The GSFIFOCapacityNNN default specifies the capacity for the FIFO, and
|
||||||
|
* if missing a capacity of 1000 is assumed.<br />
|
||||||
|
* The GSFIFOGranularityNNN integer is zero by default.<br />
|
||||||
|
* The GSFIFOTimeoutNNN integer is zero by default.<br />
|
||||||
|
* The GSFIFOSingleConsumerNNN boolean is NO by default.<br />
|
||||||
|
* The GSFIFOSingleProducerNNN boolean is NO by default.<br />
|
||||||
|
* The GSFIFOBoundariesNNN array is missing by default.<br />
|
||||||
|
*/
|
||||||
|
- (id) initWithName: (NSString*)n;
|
||||||
|
|
||||||
/** Writes up to count items from buf into the FIFO.
|
/** Writes up to count items from buf into the FIFO.
|
||||||
* If block is YES, this blocks if necessary until at least one item
|
* If block is YES, this blocks if necessary until at least one item
|
||||||
* can be written, and raises an exception if the FIFO is configured
|
* can be written, and raises an exception if the FIFO is configured
|
||||||
|
|
42
GSFIFO.m
42
GSFIFO.m
|
@ -27,6 +27,7 @@
|
||||||
#import <Foundation/NSMapTable.h>
|
#import <Foundation/NSMapTable.h>
|
||||||
#import <Foundation/NSString.h>
|
#import <Foundation/NSString.h>
|
||||||
#import <Foundation/NSThread.h>
|
#import <Foundation/NSThread.h>
|
||||||
|
#import <Foundation/NSUserDefaults.h>
|
||||||
#import <Foundation/NSValue.h>
|
#import <Foundation/NSValue.h>
|
||||||
#import <Foundation/NSZone.h>
|
#import <Foundation/NSZone.h>
|
||||||
|
|
||||||
|
@ -407,7 +408,7 @@ stats(NSTimeInterval ti, uint32_t max, NSTimeInterval *bounds, uint64_t *bands)
|
||||||
boundaries: (NSArray*)a
|
boundaries: (NSArray*)a
|
||||||
name: (NSString*)n
|
name: (NSString*)n
|
||||||
{
|
{
|
||||||
if (c < 1)
|
if (c < 1 || c > 1000000)
|
||||||
{
|
{
|
||||||
[self release];
|
[self release];
|
||||||
return nil;
|
return nil;
|
||||||
|
@ -480,15 +481,44 @@ stats(NSTimeInterval ti, uint32_t max, NSTimeInterval *bounds, uint64_t *bands)
|
||||||
- (id) initWithCapacity: (uint32_t)c
|
- (id) initWithCapacity: (uint32_t)c
|
||||||
name: (NSString*)n
|
name: (NSString*)n
|
||||||
{
|
{
|
||||||
|
NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
|
||||||
|
NSString *key;
|
||||||
|
uint16_t g;
|
||||||
|
uint16_t t;
|
||||||
|
BOOL mc;
|
||||||
|
BOOL mp;
|
||||||
|
NSArray *b;
|
||||||
|
|
||||||
|
key = [NSString stringWithFormat: @"GSFIFOCapacity%@", n];
|
||||||
|
if ([defs integerForKey: key] > 0)
|
||||||
|
{
|
||||||
|
c = [defs integerForKey: key];
|
||||||
|
}
|
||||||
|
key = [NSString stringWithFormat: @"GSFIFOGranularity%@", n];
|
||||||
|
g = [defs integerForKey: key];
|
||||||
|
key = [NSString stringWithFormat: @"GSFIFOTimeout%@", n];
|
||||||
|
t = [defs integerForKey: key];
|
||||||
|
key = [NSString stringWithFormat: @"GSFIFOSingleConsumer%@", n];
|
||||||
|
mc = (YES == [defs boolForKey: key]) ? NO : YES;
|
||||||
|
key = [NSString stringWithFormat: @"GSFIFOSingleProducer%@", n];
|
||||||
|
mp = (YES == [defs boolForKey: key]) ? NO : YES;
|
||||||
|
key = [NSString stringWithFormat: @"GSFIFOBoundaries%@", n];
|
||||||
|
b = [defs arrayForKey: key];
|
||||||
|
|
||||||
return [self initWithCapacity: c
|
return [self initWithCapacity: c
|
||||||
granularity: 0
|
granularity: g
|
||||||
timeout: 0
|
timeout: t
|
||||||
multiProducer: YES
|
multiProducer: mp
|
||||||
multiConsumer: YES
|
multiConsumer: mc
|
||||||
boundaries: nil
|
boundaries: b
|
||||||
name: n];
|
name: n];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (id) initWithName: (NSString*)n
|
||||||
|
{
|
||||||
|
return [self initWithCapacity: 10000 name: n];
|
||||||
|
}
|
||||||
|
|
||||||
- (unsigned) put: (void**)buf count: (unsigned)count shouldBlock: (BOOL)block
|
- (unsigned) put: (void**)buf count: (unsigned)count shouldBlock: (BOOL)block
|
||||||
{
|
{
|
||||||
NSTimeInterval sum;
|
NSTimeInterval sum;
|
||||||
|
|
Loading…
Reference in a new issue