<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<html>

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <script src="lib/simpleRequire.js"></script>
    <script src="lib/config.js"></script>
</head>

<body>
    <style>
        html,
        body,
        #main {
            width: 100%;
            padding: 0;
            margin: 0;
            height: 100%;
        }
    </style>
    <div id="main"></div>
    <script>
        require([
            'echarts'
        ], function (echarts) {
            var chart = echarts.init(document.getElementById('main'), null, {

            });

            chart.setOption({
                series: [{
                    type: 'tree',
                    data: [{
                        "name": "display",
                        "children": [
                            { "name": "DirtySprite", "value": 8833 },
                            { "name": "LineSprite", "value": 1732 },
                            { "name": "RectSprite", "value": 3623 }
                        ]
                    },]
                }]
            });

            setTimeout(function () {
                chart.setOption({
                    series: [{
                        type: 'tree',
                        data: [{
                            "name": "flex",
                            "children": [
                                { "name": "FlareVis", "value": 4116 }
                            ]
                        }]
                    }]
                }, true);
            }, 500);
        });
    </script>
</body>

</html>