123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- /*
- * Copyright 2014 The WebRTC Project Authors. All rights reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
- #import "ARDUtilities.h"
- #import <mach/mach.h>
- #import "WebRTC/RTCLogging.h"
- @implementation NSDictionary (ARDUtilites)
- + (NSDictionary *)dictionaryWithJSONString:(NSString *)jsonString {
- NSParameterAssert(jsonString.length > 0);
- NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
- NSError *error = nil;
- NSDictionary *dict =
- [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
- if (error) {
- RTCLogError(@"Error parsing JSON: %@", error.localizedDescription);
- }
- return dict;
- }
- + (NSDictionary *)dictionaryWithJSONData:(NSData *)jsonData {
- NSError *error = nil;
- NSDictionary *dict =
- [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
- if (error) {
- RTCLogError(@"Error parsing JSON: %@", error.localizedDescription);
- }
- return dict;
- }
- @end
- @implementation NSURLConnection (ARDUtilities)
- + (void)sendAsyncRequest:(NSURLRequest *)request
- completionHandler:(void (^)(NSURLResponse *response,
- NSData *data,
- NSError *error))completionHandler {
- // Kick off an async request which will call back on main thread.
- NSURLSession *session = [NSURLSession sharedSession];
- [[session dataTaskWithRequest:request
- completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
- if (completionHandler) {
- completionHandler(response, data, error);
- }
- }] resume];
- }
- // Posts data to the specified URL.
- + (void)sendAsyncPostToURL:(NSURL *)url
- withData:(NSData *)data
- completionHandler:(void (^)(BOOL succeeded,
- NSData *data))completionHandler {
- NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
- request.HTTPMethod = @"POST";
- request.HTTPBody = data;
- [[self class] sendAsyncRequest:request
- completionHandler:^(NSURLResponse *response,
- NSData *data,
- NSError *error) {
- if (error) {
- RTCLogError(@"Error posting data: %@", error.localizedDescription);
- if (completionHandler) {
- completionHandler(NO, data);
- }
- return;
- }
- NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
- if (httpResponse.statusCode != 200) {
- NSString *serverResponse = data.length > 0 ?
- [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] :
- nil;
- RTCLogError(@"Received bad response: %@", serverResponse);
- if (completionHandler) {
- completionHandler(NO, data);
- }
- return;
- }
- if (completionHandler) {
- completionHandler(YES, data);
- }
- }];
- }
- @end
- NSInteger ARDGetCpuUsagePercentage() {
- // Create an array of thread ports for the current task.
- const task_t task = mach_task_self();
- thread_act_array_t thread_array;
- mach_msg_type_number_t thread_count;
- if (task_threads(task, &thread_array, &thread_count) != KERN_SUCCESS) {
- return -1;
- }
- // Sum cpu usage from all threads.
- float cpu_usage_percentage = 0;
- thread_basic_info_data_t thread_info_data = {};
- mach_msg_type_number_t thread_info_count;
- for (size_t i = 0; i < thread_count; ++i) {
- thread_info_count = THREAD_BASIC_INFO_COUNT;
- kern_return_t ret = thread_info(thread_array[i],
- THREAD_BASIC_INFO,
- (thread_info_t)&thread_info_data,
- &thread_info_count);
- if (ret == KERN_SUCCESS) {
- cpu_usage_percentage +=
- 100.f * (float)thread_info_data.cpu_usage / TH_USAGE_SCALE;
- }
- }
- // Dealloc the created array.
- vm_deallocate(task, (vm_address_t)thread_array,
- sizeof(thread_act_t) * thread_count);
- return lroundf(cpu_usage_percentage);
- }
|