Project Ne10
An Open Optimized Software Library Project for the ARM Architecture
NE10DemoViewController.m
1 /*
2  * Copyright 2013-15 ARM Limited and Contributors.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  * * Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * * Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * * Neither the name of ARM Limited nor the
13  * names of its contributors may be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY ARM LIMITED AND CONTRIBUTORS "AS IS" AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  * DISCLAIMED. IN NO EVENT SHALL ARM LIMITED AND CONTRIBUTORS BE LIABLE FOR ANY
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 #import "NE10DemoViewController.h"
29 #import "test_funcs.h"
30 
32 
33 - (void)runNe10TestThreadMain;
34 @end
35 
36 @implementation NE10DemoViewController
37 
38 - (void)viewDidLoad
39 {
40  [super viewDidLoad];
41 
42  self->lock = [[NSLock alloc] init];
43  self->ne10Finished = TRUE;
44  self->ne10Result = NULL;
45 
46  self.webView.delegate = self;
47  NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"demo" ofType:@"html" inDirectory:nil];
48  NSURL *url = [NSURL fileURLWithPath:htmlFile];
49  NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
50 
51  [self.webView loadRequest:requestObj];
52 }
53 
54 - (void)didReceiveMemoryWarning
55 {
56  [super didReceiveMemoryWarning];
57 }
58 
59 // This function is called on all location change,
60 // here we use this to communicate with javascript
61 - (BOOL)webView:(UIWebView *)webView
62  shouldStartLoadWithRequest:(NSURLRequest *)request
63  navigationType:(UIWebViewNavigationType)navigationType {
64  NSURL *url = request.URL;
65  if ([[url scheme] isEqualToString:@"ne10"]) {
66  if (self->ne10Finished) {
67  //our ne10 test return "(null)" when all tests finished
68  if (self->ne10Result != NULL && ![self->ne10Result isEqual: @"\"(null)\""]) {
69  NSString *jsFunction = [NSString stringWithFormat:@"returnFromObjectivec(%@)", self->ne10Result];
70  [self.webView stringByEvaluatingJavaScriptFromString:jsFunction];
71  }
72  self->ne10Finished = FALSE;
73  NSThread* ne10TestThread = [[NSThread alloc] initWithTarget:self
74  selector:@selector(runNe10TestThreadMain)
75  object:nil];
76  [ne10TestThread start]; // Actually create the thread
77  }
78  return NO;
79  }
80  // Accept this location change, it makes no sense here
81  return YES;
82 }
83 
84 - (void)runNe10TestThreadMain {
85  //call ne10 performance test function
86  self->ne10Result = [NSString stringWithFormat:@"%s", NE10RunTest()];
87  //escape quote in string
88  self->ne10Result = [self->ne10Result stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
89  self->ne10Result = [NSString stringWithFormat:@"\"%@\"",self->ne10Result];
90  self->ne10Finished = TRUE;
91 }
92 
93 @end