[C++ or Other Android Development Languages] matheszabi:
I will post, but for me this is good enough :) others are drawing in 200-2000 milliseconds :)

The SDK part:

@Override
public void onDrawFrame(GL10 gl) {
long start = System.currentTimeMillis();
LibJNIWrapper.rendererOnDrawFrame();
long end = System.currentTimeMillis();

//Log.e("Renderer", "onDrawFrame() took: "+ (end-start)+" millisec (1e-6)");
}

The related NDK part:

void renderer_on_draw_frame() //4
{
LOGE("renderer_on_draw_frame");

//copy
static float grey;
grey += 0.01f;
if (grey > 1.0f) {
grey = 0.0f;
}

glClearColor(grey, grey, grey, 1.0f);
checkGlError("glClearColor");

glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
checkGlError("glClear");

int i;
for (i = 0; i < CANDLES_COUNT; i++) {
//LOGE("chartengine rendering i= %d",i);
renderLine((candles[i].coloredSingleLine));
renderRectangle((candles[i].coloredSingleRectangle));
}

glFlush();
}

line rendering:

void renderLine(ColoredSingleLine* pColoredSingleLine) {
if (pColoredSingleLine == NULL) {
return;
}
//matrixTranslateM(mvpMatrix, rndX, rndY, 0);

//LOGE("###renderLine pColoredSingleLine %p\n",pColoredSingleLine);

glUseProgram(pColoredSingleLine->programColoredLine.program);
checkGlError("Line: glUseProgram");

// Enable a handle to the triangle vertices
glEnableVertexAttribArray(pColoredSingleLine->programColoredLine.a_position_location);
checkGlError("Line: glEnableVertexAttribArray");

// Prepare the triangle coordinate data
glVertexAttribPointer(pColoredSingleLine->programColoredLine.a_position_location, pColoredSingleLine->lineData.COORDS_PER_VERTEX_LINE, GL_FLOAT, GL_FALSE,
pColoredSingleLine->lineData.vertexStride, pColoredSingleLine->lineData.vertices);
checkGlError("Line: glVertexAttribPointer");

// Set color for drawing the triangles
glUniform4fv(pColoredSingleLine->programColoredLine.u_color_location, 1, pColoredSingleLine->lineData.color_rgba);
checkGlError("Line: glUniform4fv");

// Apply the projection and view transformation
glUniformMatrix4fv(pColoredSingleLine->programColoredLine.u_mvp_matrix_location, 1, GL_FALSE, pColoredSingleLine->lineData.mvpMatrix);
checkGlError("Line: glUniformMatrix4fv");

glLineWidth(pColoredSingleLine->lineData.lineWidth);

// Draw the line
glDrawArrays(GL_LINES, 0, pColoredSingleLine->lineData.vertexCount); // (GLenum mode, GLint first, GLsizei count);
checkGlError("Line: glDrawArrays"); // GL_INVALID_ENUM

//GL_INVALID_ENUM is generated if mode is not an accepted value.
//GL_INVALID_ENUM is generated if type is not GL_UNSIGNED_BYTE or GL_UNSIGNED_SHORT.
GLint error = glGetError();
if (error == GL_OUT_OF_MEMORY) {
LOGE("Out of Video memory error...congrats...is your device a stone ?");
}

// Disable vertex array
glDisableVertexAttribArray(pColoredSingleLine->programColoredLine.a_position_location);

}

and the rectangle:

void renderRectangle(ColoredSingleRectangle* pColoredSingleRectangle) {
if (pColoredSingleRectangle == NULL) {
return;
}

//matrixTranslateM(mvpMatrix, rndX, rndY, 0);

glUseProgram(pColoredSingleRectangle->programColoredRectangle.program);
checkGlError("Rectangle: glUseProgram");

// Enable a handle to the triangle vertices
glEnableVertexAttribArray(pColoredSingleRectangle->programColoredRectangle.a_position_location);
checkGlError("Rectangle: glEnableVertexAttribArray");

// Prepare the triangle coordinate data
glVertexAttribPointer(pColoredSingleRectangle->programColoredRectangle.a_position_location, pColoredSingleRectangle->rectangleData.COORDS_PER_VERTEX_RECTANGLE, GL_FLOAT, GL_FALSE,
pColoredSingleRectangle->rectangleData.vertexStride, pColoredSingleRectangle->rectangleData.vertices);
checkGlError("Rectangle: glVertexAttribPointer");

// Set color for drawing the triangles
glUniform4fv(pColoredSingleRectangle->programColoredRectangle.u_color_location, 1, pColoredSingleRectangle->rectangleData.color_rgba);
checkGlError("Rectangle: glUniform4fv");

// Apply the projection and view transformation
glUniformMatrix4fv(pColoredSingleRectangle->programColoredRectangle.u_mvp_matrix_location, 1, GL_FALSE, pColoredSingleRectangle->rectangleData.mvpMatrix);
checkGlError("Rectangle: glUniformMatrix4fv");

// Draw the square
glDrawElements(GL_TRIANGLES, NELEMS(pColoredSingleRectangle->rectangleData.drawOrder), GL_UNSIGNED_SHORT, pColoredSingleRectangle->rectangleData.drawOrder); // GL_INVALID_ENUM on Galaxy note
checkGlError("Rectangle: glDrawElements"); // GL_INVALID_ENUM

//GL_INVALID_ENUM is generated if mode is not an accepted value.
//GL_INVALID_ENUM is generated if type is not GL_UNSIGNED_BYTE or GL_UNSIGNED_SHORT.
GLint error = glGetError();
if (error == GL_OUT_OF_MEMORY) {
LOGE("Out of Video memory error...congrats...is your device a stone ?");
}

// Disable vertex array
glDisableVertexAttribArray(pColoredSingleRectangle->programColoredRectangle.a_position_location);

}

At any benchmarks my fps is bellow 12, while other devices has 30 or 50 fps. Believe me not my device has the best CPU + GPU by far:

some output from on old code:

printGLString("Version", GL_VERSION);
printGLString("Vendor", GL_VENDOR);
printGLString("Renderer", GL_RENDERER);
printGLString("Extensions", GL_EXTENSIONS);

....

void printGLString(const char *name, GLenum s) {
const char *v = (const char *) glGetString(s);
LOGE("GL %s = %s\n", name, v);
}

// ### GT-N8000 ### Galaxy note 10" - GL Renderer = Mali-400 MP

// GL_EXT_debug_marker

// GL_OES_texture_npot

// GL_OES_compressed_ETC1_RGB8_texture

// GL_OES_standard_derivatives

// GL_OES_EGL_image

// GL_OES_depth24

// GL_ARM_rgba8

// GL_ARM_mali_shader_binary

// GL_OES_depth_texture

// GL_OES_packed_depth_stencil

// GL_EXT_texture_format_BGRA8888

// GL_EXT_blend_minmax

// GL_OES_EGL_image_external

// GL_OES_EGL_sync

// GL_OES_rgb8_rgba8

// GL_EXT_multisampled_render_to_texture

// GL_EXT_discard_framebuffer

// ### THL V8S - GL Renderer = PowerVR SGX 544MP

// GL_EXT_debug_marker

// GL_OES_rgb8_rgba8

// GL_OES_depth24

// GL_OES_vertex_half_float

// GL_OES_texture_float

// GL_OES_texture_half_float

// GL_OES_element_index_uint

// GL_OES_mapbuffer

// GL_OES_fragment_precision_high

// GL_OES_compressed_ETC1_RGB8_texture

// GL_OES_EGL_image

// GL_OES_EGL_image_external

// GL_OES_required_internalformat

// GL_OES_depth_texture

// GL_OES_get_program_binary

// GL_OES_packed_depth_stencil

// GL_OES_standard_derivatives

// GL_OES_vertex_array_object

// GL_OES_egl_sync

// GL_OES_texture_npot

// GL_EXT_multi_draw_arrays

// GL_EXT_texture_format_BGRA8888

// GL_EXT_discard_framebuffer

// GL_EXT_shader_texture_lod

// GL_IMG_shader_binary

// GL_IMG_texture_compression_pvrtc

// GL_IMG_texture_compression_pvrtc2

// GL_IMG_texture_npot

// GL_IMG_texture_format_BGRA8888

// GL_IMG_read_format

// GL_IMG_program_binary

// GL_IMG_uniform_buffer_object

// GL_IMG_multisampled_render_to_texture