Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TIMOB-24523] Android: Implement support for Frame metrics API #9445

Closed
wants to merge 2 commits into from

Conversation

ypbnv
Copy link
Contributor

@ypbnv ypbnv commented Sep 19, 2017

JIRA: https://jira.appcelerator.org/browse/TIMOB-24523

Description:
Expose FrameMetrics API which provides information for performance analysis.
Maybe we can include this in Analytics module as well?

Test cases:

Only with windows:

window = Ti.UI.createWindow({backgroundColor: 'gray'});
button = Ti.UI.createButton({title: 'New window', top: 50});
buttonMetrics = Ti.UI.createButton({title: 'Click', top: 100});
window.add(button);
window.add(buttonMetrics);
button.addEventListener('click', function(e){
    newWin = Ti.UI.createWindow({backgroundColor: 'green'});
    newButton = Ti.UI.createButton({title: 'Click'});
    newWin.add(newButton);
    newWin.addEventListener('framemetrics', function(e){
        Ti.API.info('-------------SECOND_WINDOW_METRICS--------------');
        Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.ANIMATION_DURATION));
        Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.COMMAND_ISSUE_DURATION));
        Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.DRAW_DURATION));
        Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.FIRST_DRAW_FRAME));
        Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.INPUT_HANDLING_DURATION));
        Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.INTENDED_VSYNC_TIMESTAMP));
        Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.LAYOUT_MEASURE_DURATION));
        Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.SWAP_BUFFERS_DURATION));
        Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.SYNC_DURATION));
        Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.TOTAL_DURATION));
        Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.UNKNOWN_DELAY_DURATION));
        Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.VSYNC_TIMESTAMP));
    });
    newWin.open();
});

window.addEventListener('framemetrics', function(e){
    Ti.API.info('---------------FIRST_WINDOW_METRICS----------------');
    Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.ANIMATION_DURATION));
    Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.COMMAND_ISSUE_DURATION));
    Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.DRAW_DURATION));
    Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.FIRST_DRAW_FRAME));
    Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.INPUT_HANDLING_DURATION));
    Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.INTENDED_VSYNC_TIMESTAMP));
    Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.LAYOUT_MEASURE_DURATION));
    Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.SWAP_BUFFERS_DURATION));
    Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.SYNC_DURATION));
    Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.TOTAL_DURATION));
    Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.UNKNOWN_DELAY_DURATION));
    Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.VSYNC_TIMESTAMP));
});

window.open();

With TabGroup and Window

// this sets the background color of the master UIView (when there are no windows/tab groups on it)
Titanium.UI.setBackgroundColor('#000');

// create tab group
var tabGroup = Titanium.UI.createTabGroup();

tabGroup.addEventListener('framemetrics', function(e){
                Ti.API.info('-------------TAB_GROUP_METRICS--------------');
                Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.ANIMATION_DURATION));
                Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.COMMAND_ISSUE_DURATION));
                Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.DRAW_DURATION));
                Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.FIRST_DRAW_FRAME));
                Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.INPUT_HANDLING_DURATION));
                Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.INTENDED_VSYNC_TIMESTAMP));
                Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.LAYOUT_MEASURE_DURATION));
                Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.SWAP_BUFFERS_DURATION));
                Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.SYNC_DURATION));
                Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.TOTAL_DURATION));
                Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.UNKNOWN_DELAY_DURATION));
                Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.VSYNC_TIMESTAMP));
            });

//
// create base UI tab and root window
//
var win1 = Titanium.UI.createWindow({  
    title:'Tab 1',
    backgroundColor:'#fff'
});

var newWindowButton = Ti.UI.createButton({title: 'New window'});
newWindowButton.addEventListener('click', function(e){
    var newWindow = Ti.UI.createWindow({backgroundColor: 'red'});
    newWindow.addEventListener('framemetrics', function(e){
                 Ti.API.info('-----------------NEW_WINDOW_METRICS-----------------');
                 Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.ANIMATION_DURATION));
                 Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.COMMAND_ISSUE_DURATION));
                 Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.DRAW_DURATION));
                 Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.FIRST_DRAW_FRAME));
                 Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.INPUT_HANDLING_DURATION));
                 Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.INTENDED_VSYNC_TIMESTAMP));
                 Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.LAYOUT_MEASURE_DURATION));
                 Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.SWAP_BUFFERS_DURATION));
                 Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.SYNC_DURATION));
                 Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.TOTAL_DURATION));
                 Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.UNKNOWN_DELAY_DURATION));
                 Ti.API.info(e.frameMetrics.getMetric(Titanium.FrameMetrics.VSYNC_TIMESTAMP));
    });
    var clickButton = Ti.UI.createButton({title: 'Click'});
    newWindow.add(clickButton);
    newWindow.open();
});
win1.add(newWindowButton);
var tab1 = Titanium.UI.createTab({  
    title:'Tab 1',
    window:win1
});
//
// create controls tab and root window
//
var win2 = Titanium.UI.createWindow({  
    title:'Tab 2',
    backgroundColor:'#fff'
});
win2.add(Ti.UI.createButton({title: 'Click'}));
var tab2 = Titanium.UI.createTab({  
    title:'Tab 2',
    window:win2
});
//
//  add tabs
//
tabGroup.addTab(tab1);  
tabGroup.addTab(tab2);  


// open tab group
tabGroup.open();

Docs are on the way.

@hansemannn
Copy link
Collaborator

This should be a module, not a core-api, since we do not have parity with iOS and it's a new feature.

@ypbnv
Copy link
Contributor Author

ypbnv commented Sep 19, 2017

Moving this as a module.

@ypbnv ypbnv closed this Sep 19, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants