Hi Neal,
When it comes to the commercial Vaadin addons the best place to get an answer quickly is using the Pro services and filing a Support Request. That guaranties that someone will get you the answer you need and track the original author down if needed.
That said, the second best place to ask is right here in the forums. At least most of the addon authors I know read the forums and will answer if they can and have time. The forum is a community effort so it may take some time to get an answer and the answers may vary in quality but you usually do get an answer.
When it comes to non-commercial addons then the addon page usually states some author web page, forum post or email address where you can ask questions. This is of course totally up to the author to provide and not all authors want to get contacted. In that case leaving an addon review might work.
But let me try to answer your questions.
The Timeline uses the pixel width of the component to determine the maximum amount of points to load for a graph. For instance if the Timeline is 400px wide then a maximum of 400 points will be loaded to the browser. If you have two graphs visible then a maximum of 400*2 points will be loaded etc. The Timeline also caches these points so if you again look at the same time interval with the same zoom level then the Timeline will not load anything and just show the cached points.
The way Timeline decides which points should be shown (and loaded from the container datasource) when subsampling occurs is by a pretty simple algorithm. For instance if the graph is showing the whole time range of what you have in the data source (say 1M points) then the Timeline will calculate a ratio D = amount of points in container / pixel width and then get every Dth point from the container and send that to the browser. This is not optimal in that data peaks might get lost if the peaks happen between each Dth point. You will notice this if you zoom in/out and suddenly peaks become visible when you zoom in and then again hidden when zooming out. There is an open ticket
#9116
about improving this. However, the timeline does never load all your points whatever amount of points you have.
There are two reasons I can thing of which might cause your issues.
a) Fetching the data from the data source. The Timeline will quite intensively query the container for the required data and if the container is connected directly to a database (using a JPAContainer or SQLContainer) the database<->server communication might slow down the loading.
b) Rendering is a CPU intensive operation. This is most likely the cause of the 100% CPU spikes.
First of all if you are using IE6-IE8, which does not support the HTML5 canvas, VML will be used instead which is VERY slow and CPU intensive. Depending on how many of those 128k points actually got drawn I do see that things might get slow with many graphs. VML is just an old technology which is slow and there is not much that can be done about that.
Even on the most recent browsers drawing on the HTML5 Canvas is a CPU intensive process. On my workstation I rarely see something like 100% of CPU but I have seen this on some older laptops where older versions of Firefox have been used. I also remember that on some operating systems hardware rendering of the HTML5 Canvas was not supported with older browsers, I think that is the case with IE9 still (not sure) and Firefox on linux also suffered from this some time ago.
There are a lot of optimizations the Timeline could do on this front which has not been done yet. Some of them include double buffering of the rendering, using animation frames and a lot of other “tricks” currently used by many HTML5 games. However these cannot be all done across all the supported browsers so they were left undone for now. Maybe some day someone will look into that.
Some common optimization tips I could give is limiting the amount of simultaneous graphs in the Timeline, disabling graph shadows and use as little as possible alpha colors. These are the usual culprits.
The Timeline does not store the points in the Timeline object, it always fetches them from the container data source. So a good place to focus is on how big your containers grow. If you are loading everything into say a BeanItemContainer from the database then it might become quite big when talking about millions of points. If you are using some lazy loading container like the SQLContainer or JPAContainer then it will not consume as much memory. Since each graph maps to one container you should be able to deduce the memory limits by looking at the container sizes quite easily.
Edit: Jonatan apparently beat me to it