• Stars
    star
    268
  • Rank 150,155 (Top 4 %)
  • Language
    Objective-C
  • License
    MIT License
  • Created over 3 years ago
  • Updated almost 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

MoonLight is a performance test kit on iOS and macOS. It can capture App Memory, App CPU, System CPU, GPU, ANR and iOS FPS and accurately and easily.

MoonLight

English | 中文

What is MoonLight?

MoonLight is a performance test kit for iOS/macOS app which can be integrated into your app to implement performance data captured easily. MoonLight can provide App CPU, System CPU, App Memory, System GPU ,GPU info, ANR and iOS FPS accuratly.

Why named it as MoonLight?

We name it as MoonLight because we hope it can make performance test easier and more efficient, just like the tranquil moonlight guides wanderers in the dark night and gives us a feeling of serenity and comfort.

MoonLight has low performance consumption and is easy to use. The performance data captured by MoonLight is accurately. It will help dev team locate the performance problems more quickly and accurately to promote the performance optimization. Help test team get performance data faster and more accurately to improve test efficiency.

Comparison

Instruments

The peformance data captured by MoonLight is the same as Instruments. The specific advantages and disadvantages are as follows.

  1. Instruments can not be implemented to performance test automation and can not get the specific data to be analysed scientifically. By comparison, MoonLight can provide the performance data accuratly and can support to implement performance test automation.

  2. Instruments can not to be implemented to test remotely. You can not test your app in your home while the device in your company. Therefore, you can not test plenty of devices at the same time. By comparison, MoonLight can support it.

  3. Low system iOS devices cannot by tested on the latest version Insturuments. By comparison, MoonLight doesn't have the limitaion.

  4. Insturments on macOS doesn't support gpu captureing. By comparison, MoonLight supports. The Moonlight's gpu info is the same as the activity monitor on macOS.

  5. Instruments also has advantages, such as the Allocations and Leaks to provide memory leaks testing. Instruments can also provide data visualization. By comparison, MoonLight is programmable. Developers can use MoonLight to implement data visualization and automated test need.

GT

GT is an opensource performance test project from Tencent. And GT also has many disvantages.

  1. GT is not support macOS. By comparison, MoonLight supports.

  2. GT's App Memory is not the same as Instruments. And GT can not output GPU and System CPU. By comparison, MoonLight supports.

  3. When GT is integrated in user's app, the app should add too many dependent frameworks and should disable Bitcode support. Moreover, GT‘s package size is much bigger than MoonLight. MoonLight only needs to add one framework on iOS and does not need to add any framework on macOS.

Perfdog

Perfdog is a closed source performance test tool from Tencent. And it does have many disvantages.

  1. Perfdog cannot sppport macOS app.

  2. Perfdog is not a automated performance test tool. It needs user to point UI button to start or stop performance testing. Perfdog's advantage is data visualization.

  3. Perfdog is not an open source project. And it did have serious bug on iOS14 that the App CPU captured by Perfdog is wrong. If use Perfdog to test your app, maybe you will find a new serious bug in the future because we do not konw Pefdog's source code.

Requirements

  • iOS 8.0+
  • macOS 10.11+

Installation

Cocoapods

  • iOS:

Warning! For iOS, do not use it on AppStore release. Recommend use it on debug mode.

pod 'MoonLight_iOS', :configurations => ['Debug']
  • macOS:
pod 'MoonLight_macOS'

Usage

// Step1: create MoonLight instance and set sampling interval.
	_moonLight = [[MoonLight alloc]initWithDelegate:self timeInterval:1];

// Step2: start timer.
	[_moonLight startTimer];


// Step3: through the callback, you can get all the performance data per interval.
- (void)captureOutputAppCPU:(float)appCPU systemCPU:(float)systemCPU appMemory:(float)appMemory gpuUsage:(float)gpuUsage gpuInfo:(NSString *)gpuInfo {
	NSLog(@"appMemory:%f", appMemory);
	NSLog(@"appCPU:%f", appCPU);
	NSLog(@"gpuUsage:%f", gpuUsage);
	NSLog(@"systemCPU:%f", systemCPU);
	NSLog(@"gpuInfo:%@", gpuInfo);
}

// Step4:if you want to stop capturing the performance data, use "stopTimer".
	[_moonLight stopTimer];
	
// ANR (Optional):

// if you want to get the ANR caused by the thread you want to monitor, use the API as follows:
	_detectPing = [MLANRDetectPing initWithMonitoringQueue:dispatch_get_main_queue()];
	_detectPing.delegate = self;
	[_detectPing start];
	NSLog(@"The ANR based on ping detection and the count is %ld", _detectPing.count);

// if you want to get ANR caused by cpu or gpu, use the API as follows:
	_moonLight.isANR = true;
	NSLog(@"The ANR based on gpu/cpu detection and the count is %ld", _moonLight.count);

Test Result

The performance consumption of MoonLight is very low. It's almost negligible. App CPU, System CPU, App Memory and iOS GPU are the same as Instruments and the macOS GPU is the same as Activity Monitor.

MoonLight VS Instruments

  • iOS

avatar

  • macOS

avatar

Comment:CPU(MoonLight) = CPU(Instruments) / Core Num

The Perforamnce Consumption of MoonLight

Test case: Use Instruments, Open your app, enable MoonLight detection and get the performance data1. Than, open your app again, do not enable MoonLight detection and get the performance data2. And the performance consumption = data2 - data1.

  • iOS

App Memory = 7.38 - 7.34 = 0.04Mb, App CPU = (2.1%-0.1%)/ (6 core) = 0.33%, GPU = 0%.

Device: iPhone XS iOS14.2 , Core number: 6

  • macOS

App Memory = 14.42-14.36 = 0.06Mb, App CPU = (0.08% - 0.0%) / (4 core) = 0.02%, GPU = 0%.

Device: Macbook Pro 2017 13.3 Intel i5 , System: BigSur 11.0.1

Author

Echoo J

License

MoonLight is available under the MIT license. See the LICENSE file for more info.

More Repositories

1

Agora-Flutter-Quickstart

Quickstart guide for the Agora Flutter SDK(Android/iOS)
Dart
500
star
2

Solo

Agora Solo is an open source speech codec, it was developed based on Silk with BWE(Bandwidth Extension) and MDC(Multi Description Coding). With these technologies, Solo is enable to resist weak networks at low bitrates.
C
227
star
3

AgoraWebSDK-NG

The Next Generation of Agora Web SDK
TypeScript
161
star
4

RTC-Hackathon

CSS
147
star
5

VideoUIKit-Flutter

Flutter plugin to simply integrate Agora Video Calling or Live Video Streaming to your app with just a few lines of code.
Dart
136
star
6

Agora-RN-Quickstart

Java
111
star
7

Agora_Unity_WebGL

WebGL plugin for Unity, beta release
C#
109
star
8

OpenAgoraWeb-React

Video Call App built with ❤️Agora SDK❤️ and React
JavaScript
99
star
9

VideoUIKit-ReactNative

A React Native package to simply integrate Agora Video Calling or Live Video Streaming to your app with just a few lines of code.
TypeScript
93
star
10

Agora-RTC-React

A react wrapper for Agora RTC NG SDK
TypeScript
92
star
11

Agora-Electron-Quickstart

Quickstart for Agora Electron SDK(Windows/macOS) https://github.com/AgoraIO/Electron-SDK
JavaScript
70
star
12

Agora-Python-SDK

Use Agora RTC SDK with Python!
C++
63
star
13

VideoUIKit-iOS

Swift package and CocoaPod to simply integrate Agora Video Calling or Live Video Streaming to your iOS or macOS app with just a few lines of code.
Swift
57
star
14

VideoUIKit-Web-React

A Web library to simply integrate Agora Video Calling or Live Video Streaming to your website with just a few lines of code.
TypeScript
49
star
15

CloudClass-Desktop

TypeScript
49
star
16

Agora-Python-QuickStart

Python
40
star
17

OpenAgoraWeb-Vue

Video Call App built with ❤️Agora SDK❤️ and Vue
Vue
36
star
18

agora-token-service

an Agora Token Server using Golang & Gin to run as a webservice
Go
34
star
19

Idea-Box

HTML
34
star
20

RTE-2021-Innovation-Challenge

C++
33
star
21

Agora-RTC-SDK-for-Xamarin

C#
32
star
22

Agora-Node-TokenServer

A simple token server for Agora applications using NodeJS with Express, and Agora Access Token modules.
JavaScript
30
star
23

2019-Hackathon-Works-CoderLane

Coderlane is an online real-time programming environment, a high-fidelity REPL environment. It also supports multi-person programming.
JavaScript
30
star
24

typing

Swift
28
star
25

Agora-Unreal-SDK-Blueprint

Agora Unreal SDK - Blueprint (Beta)
C++
27
star
26

ag-iot-device-demo-esp32

C
27
star
27

Agora-Uniapp-SDK

TypeScript
26
star
28

RTE-Innovation-Challenge-2020

Objective-C
26
star
29

Agora-Rust-SDK

Rust
23
star
30

Agora-Unity-RTM-SDK

A Unity3D sample app to show Login /Logout, Log in to/out of channel, Get Channel Member Count, Send/Receive Channel Message, Send Peer Message, Query Member, and token Authentication
C#
23
star
31

VideoUIKit-Android

An Android package to simply integrate Agora Video Calling or Live Video Streaming to your app with just a few lines of code.
Kotlin
22
star
32

Agora-Unreal-SDK-CPP

Agora Unreal SDK - C++ (Beta)
C++
21
star
33

agora-unity-partychat-demo

Unity video party chat using Agora SDK and Photon. Refer to the Medium post for project setup from scratch!
C#
20
star
34

AR-Remote-Support

This is a POC of how to build a Remote support app (similar to Vuforia Chalk) using ARKit and Agora.io's Video SDK.
Swift
20
star
35

Agora-Unreal-SDK

C++
17
star
36

CloudClass-Android

Kotlin
16
star
37

ARCoreAgora

Java
16
star
38

Unity-Virtual-Camera-Prefab

An open source prefab that makes it easy to live video streaming from a Unity virtual camera into an Agora live video chat or live video streaming channel.
C#
16
star
39

python-token-builder

Python
15
star
40

agora-remote-desktop-control-samples

TypeScript
15
star
41

LrcView-iOS

Swift
15
star
42

AgoraUWP

Agora WinRT and UWP SDK
C++
15
star
43

MediaIO-Camera

Java
15
star
44

TokenServer-nodejs

One-Click deploy Agora sample token server
JavaScript
15
star
45

CloudClass-iOS

Swift
14
star
46

Agora-iOS-Swift-Example

Example of creating a multi-broadcasting channel with Agora.io
Swift
11
star
47

flexible-classroom-desktop

TypeScript
11
star
48

Collaborative-AR-RTM

A collaborative Augmented Reality iOS experience using Real-time Messaging with RealityKit
Swift
11
star
49

Angular-Agora-RTC

TypeScript
11
star
50

AgoraMultiCall-vue

Vue
10
star
51

Agora-Rust-QuickStart

Rust
10
star
52

AI-in-RTC_ProgrammingChallenge

JavaScript
10
star
53

visionOS-Quickstart

Basic video call with visionOS for Apple Vision Pro. Using Agora RTC SDK.
Swift
10
star
54

agora-rest-client-go

Go
10
star
55

RTE-2022-Innovation-Challenge

RTE 2022 编程挑战赛
C++
10
star
56

Agora-ReactNative-Dynamic-Rooms

Dynamic Video Chat Rooms in React Native using Agora RTC and RTM SDKs. The RTC SDK is used to share live audio/video, RTM is used to signal the room details to all connected users.
TypeScript
9
star
57

Agora-Electron-FaceUnity-Plugin

C++
9
star
58

AvatAR

The project aims to build a playground/plugin which developers can use to define gestures within video calls. For ex. Ability to add VFX like Doctor Strange making those golden circles, Thor lightning up with electricity flowing through him, even do sign language(not finger level fidelity)/human pose detection for a variety of tasks, all within the browser be it on PC or mobile using TensorFlow for ML+AR & Agora to do the video-chat heavy lifting.
JavaScript
9
star
59

awesome-agora

Useful collection of Agora resources.
8
star
60

SwiftUIRtc

SwiftUI and Real-time Video Calling with Agora's RTC SDK
Swift
8
star
61

BeautyAPI

Kotlin
8
star
62

Agora-Web-Conferencing

Web Conferencing Sample using the Agora Platform
TypeScript
8
star
63

Agora-ARKit

Swift
7
star
64

AgoraAdvancedDemo

Advanced guides for Agora Unity SDK for voice and video. http://agora.io
C#
7
star
65

app-builder-core

TypeScript
7
star
66

AUIKaraoke

UIKit
Swift
7
star
67

agora-advanced-web-broadcast-demo

A demo project using the Agora Web RTC and RTM SDKs, leveraging advance RTC features like dual stream with stream fallback, multi-host broadcasting. Web users can mute each other's audio or remove others from the call. Signalling layer is using Agora's RTM SDK.
JavaScript
7
star
68

Agora-RTM-React

A wrapper for Agora RTM Web SDK to use with react/reactjs
TypeScript
6
star
69

ContentContributorGuides

This repository will contain all documents related to the process for publishing content for the Agora Content Contributor Program.
6
star
70

ag-iot-android-app

Java
6
star
71

Agora-demo-web

Agora Web Demo
JavaScript
6
star
72

AgoraARKit

Enabling apps to live stream AR video streams.
Swift
6
star
73

Agora-RTM-Nodejs

Agora RTM SDK on Nodejs
C++
6
star
74

Live-Shop

C++
5
star
75

ag-iot-device-demo

C
5
star
76

2019-Hackathon-Works-Online-Debate

JavaScript
5
star
77

ag-iot-callkit-android-app

Java
5
star
78

EaseIMKit

5
star
79

AgoraWinRT

Agora WinRT and UWP SDK
C++
5
star
80

AUIKit

UIKit
Swift
5
star
81

AgoraFireTV

JavaScript
5
star
82

HousepartyAgora

Java
5
star
83

Agora-Cocos-Quickstart

JavaScript
5
star
84

go-tokenbuilder

a package for the Agora Token classes in Golang
Go
4
star
85

.github

4
star
86

Agora-Unity-MetaKTV

C#
4
star
87

Agora-C_Sharp_QuickStart

C#
4
star
88

UnityCloudRecording

Sample Code for running Cloud Recording in Unity
C#
4
star
89

Agora-Dynamic-Loading-Sample-App-Android

Java
4
star
90

Cloud-Recording-Golang

Golang backend service to help with cloud recording
Go
4
star
91

ag-iot-callkit-esp32-demo

C
4
star
92

Lip-sync

C#
4
star
93

WhatsappAgora

Java
4
star
94

Extension-Voicemod-iOS

Swift
4
star
95

app-builder-docs

JavaScript
4
star
96

cordova-video-chat

Objective-C
3
star
97

Talkboard

Objective-C
3
star
98

Agora-Audio-Example-iOS

Swift
3
star
99

NG-APIExamples

C++
3
star
100

ag-iot-callkit-device-demo

C
3
star