/*******************************************************************************
 *  Copyright (c) 2000, 2015 IBM Corporation and others.
 *  All rights reserved. This program and the accompanying materials
 *  are made available under the terms of the Eclipse Public License v1.0
 *  which accompanies this distribution, and is available at
 *  http://www.eclipse.org/legal/epl-v10.html
 * 
 *  Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdt.debug.tests.performance;

import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.debug.ui.actions.ContextualLaunchAction;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.debug.tests.AbstractDebugPerformanceTest;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell;

/**
 * Tests the performance of the contextual launch menu population 
 */
public class PerfContextualLaunchMenu extends AbstractDebugPerformanceTest {
    
    /**
     * Constructor
     * @param name
     */
    public PerfContextualLaunchMenu(String name) {
        super(name);
    }

    /**
     * Tests the performance of the fly-out time of the contextual launch menu
     * @throws Exception
     */
    public void testContextualLaunchMenu() throws Exception {
    	setDegradationComment("This test is unreliable as it improved 10x during 3.3 (vs 3.2), and needs to be replaced.");
        final PerfTestContextualLaunchAction launchaction = new PerfTestContextualLaunchAction();
        
        ICompilationUnit cu = getCompilationUnit(get14Project(), "src", "org.eclipse.debug.tests.targets", "SourceLookup.java");        
        StructuredSelection selection = new StructuredSelection(new Object[] {cu});
        launchaction.selectionChanged(new BogusAction(), selection);
        
        DebugUIPlugin.getStandardDisplay().syncExec(new Runnable() {
            @Override
			public void run() {
                Shell shell = DebugUIPlugin.getStandardDisplay().getActiveShell();
                Menu menu = launchaction.getMenu(new Menu(shell));
                showMenu(launchaction, menu, 5);
                
                for(int i=0; i<10; i++) {
                    try {
                    System.gc();
                    startMeasuring();
                    showMenu(launchaction, menu, 40);
                    stopMeasuring();
                    } catch (Throwable t) {
                        System.err.println("Error on iteration: " + i);
                        t.printStackTrace();
                        break;
                    }
                }
            }

            private void showMenu(PerfTestContextualLaunchAction action, Menu menu, int repeat) {
                for (int j = 0; j < repeat; j++) {
                    action.showMenu(menu);
                }
            }
        });


        commitMeasurements();
        assertPerformance();
    }
    
    private class BogusAction extends Action {
    }
    
    private class PerfTestContextualLaunchAction extends ContextualLaunchAction {
        /**
         * Constructor
         */
        public PerfTestContextualLaunchAction() {
            super(ILaunchManager.RUN_MODE);
        }
        
        void showMenu(Menu menu) {
        	fillMenu(menu);
        }
    }
}
