I have already posted problem on Stack Overflow 
http://stackoverflow.com/questions/36726383/google-timeline-memory-leak-when-redrawing-chart

Here is the chart https://jsfiddle.net/damiantt/t2skaegg/2/


<script type="text/javascript" src="//www.google.com/jsapi"></script>
<script type="text/javascript" 
src="https://www.gstatic.com/charts/loader.js";></script>
<script 
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js";></script>

<input id="Draw" type="button" value="Draw" onclick="drawChart();" />

<div id="chart_div_container" style="overflow-x: auto;min-height:0%;">
  <div id="chart_div" style="overflow: visible;min-height:0%;"></div>
</div>

<script type="text/javascript">
google.charts.load('current', {
  'packages': ['timeline', 'table']
});

var initWidth = $('#chart_div').innerWidth();
var colorMap;

function drawChart() {
    $('#chart_div').off();
    $('#chart_div').empty();
  var data = google.visualization.arrayToDataTable([
    ['Maszyna', 'Kolor', {
      type: 'string',
      role: 'tooltip',
      'p': {
        'html': true
      }
    }, 'Start Time', 'End Time'],

    ['one', 'pi1', 'brr',
      new Date(2014, 10, 15, 12, 30, 0),
      new Date(2014, 10, 15, 12, 30, 20)
    ],
    ['one', 'pu3', 'brr',
      new Date(2014, 10, 15, 12, 30, 20),
      new Date(2014, 10, 15, 12, 30, 45)
    ],
    ['one', 'pu3', 'brr',
      new Date(2014, 10, 15, 12, 30, 45),
      new Date(2014, 10, 15, 12, 30, 55)
    ],
    ['two', 'g2', 'brr1',
      new Date(2014, 10, 15, 12, 30, 35),
      new Date(2014, 10, 15, 12, 30, 55)
    ],

    ['two', 'pi1', 'brr2',
      new Date(2014, 10, 15, 12, 30, 55),
      new Date(2014, 10, 15, 14, 31, 55)
    ],

    ['three', 'pu3', 'brr',
      new Date(2014, 10, 15, 12, 29, 30),
      new Date(2014, 10, 15, 14, 30, 0)
    ],
    ['three', 'pi1', 'brr',
      new Date(2014, 10, 15, 14, 30, 0),
      new Date(2014, 10, 15, 14, 35, 0)
    ],
    ['three', 'g2', 'Zbrr',
      new Date(2014, 10, 15, 14, 35, 0),
      new Date(2014, 10, 15, 15, 25, 10)
    ],
    ['three', 'pu3', 'KR1',
      new Date(2014, 10, 15, 15, 25, 10),
      new Date(2014, 10, 15, 15, 26, 00)
    ],
    ['three', 'g2', 'KR2',
      new Date(2014, 10, 15, 15, 26, 00),
      new Date(2014, 10, 15, 15, 26, 45)
    ],
    ['three', 'pi1', 'KR3',
      new Date(2014, 10, 15, 15, 26, 45),
      new Date(2014, 10, 15, 15, 27, 15)
    ],
    ['three', 'pu3', 'brr',
      new Date(2014, 10, 15, 15, 27, 15),
      new Date(2014, 10, 15, 20, 30, 1)
    ],
    ['three', 'pi1', 'brr',
      new Date(2014, 10, 15, 20, 30, 1),
      new Date(2014, 10, 16, 10, 30, 10)
    ],
    ['three', 'pu3', 'brr',
      new Date(2014, 10, 16, 10, 30, 10),
      new Date(2014, 10, 16, 18, 30, 10)
    ],
  ]);

  var colors = [];
  colorMap = {
    // should contain a map of category -> color for every category
    pi1: '#e63b6f',
    g2: '#19c362',
    pu3: '#592df7',
    c4: '#000000',
    '000000': '#000000'
  }
  for (var i = 0; i < data.getNumberOfRows(); i++) {
    colors.push(colorMap[data.getValue(i, 1)]);
  }

  var options = {
    enableInteractivity: false,
    height: 210,
    width: initWidth,
    colors: colors,
    avoidOverlappingGridLines: false,
    timeline: {
      showBarLabels: false
    },
    hAxis: {
      format: 'dd/MM\nHH:mm'
    },
    tooltip: {
      isHtml: true
    }
  };

  var chart = new 
google.visualization.Timeline(document.getElementById('chart_div'));

  chart.draw(data, options);

  afterDraw(data, colors);

  $(document).ready(function() {
    var zoom = 1000;
    var leftSpace = $('rect:first-child+path').position().left - $('#chart_div 
svg').position().left;
    var svgOffset = $('#chart_div svg').offset().left;
    var $chartDivCont = $('#chart_div_container');

    var x, left, down;
    $('#chart_div').on({
      'mousemove': function(evt) {
        if (down) {
          var newX = evt.pageX;
          $chartDivCont.scrollLeft(left - newX + x);
        }
      },
      'mousedown': function(evt) {
        $('html').css('cursor', 'col-resize');
        evt.preventDefault();
        down = true;
        x = evt.pageX;
        left = $chartDivCont.scrollLeft();
      },
      'mouseup': function() {
        down = false;
        $('html').css('cursor', 'auto');
      },
      'mousewheel DOMMouseScroll': function(evt) {
        evt.preventDefault();
        if (evt.originalEvent.wheelDelta > 0 || evt.originalEvent.detail < 0) {
          if (options.width < 31000) {
            options.width += zoom;
            var prevScrollLeft = $chartDivCont.scrollLeft();
            var prop = ($chartDivCont.scrollLeft() + evt.originalEvent.clientX 
- leftSpace - svgOffset) / ($('#chart_div svg').width() - leftSpace);
            chart.draw(data, options);
            afterDraw(data, colors);
            $chartDivCont.scrollLeft(prevScrollLeft + (prop * 1000));
          }
        } else {
          if (options.width >= initWidth + zoom) {
            options.width -= zoom;
            var prevScrollLeft = $chartDivCont.scrollLeft();
            var prop = ($chartDivCont.scrollLeft() + evt.originalEvent.clientX 
- leftSpace - svgOffset) / ($('#chart_div svg').width() - leftSpace);
            chart.draw(data, options);
            afterDraw(data, colors);
            $chartDivCont.scrollLeft(prevScrollLeft - (prop * 1000));
          }
        }
      }
    });
  });
}

function afterDraw(data, colors) {
  $rects = $('#chart_div svg > g:nth-child(5) > rect');
  for (var i = 0; i < $rects.length; i++) {
    $('#chart_div svg > g:nth-child(5) > rect:nth-child(' + (i + 1) + ')').css({
      "fill": colors[i]
    });
  }
}




When i run it on Chrome, memory usage is ~75k. After Draw and max zoom in 
(zoom it by mouse scroll) memory meter shows 140k, then max zoom out - 180k 
memory usage, zoom in - 225k, zoom out - 265k. 

Is any way to free memory after every draw()? I tried to delete HTML 
elements, to null variables, but nothing helps me

-- 
You received this message because you are subscribed to the Google Groups 
"Google Visualization API" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-visualization-api.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-visualization-api/e1c5fa2e-ebf3-4815-a412-48037acdd526%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to